You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

65 lines
1.9 KiB

  1. //
  2. // File.swift
  3. //
  4. //
  5. // Created by Michiel Carman on 4/1/24.
  6. //
  7. import Fluent
  8. import Vapor
  9. struct cntrlUser: RouteCollection {
  10. func boot(routes: RoutesBuilder) throws {
  11. let rts = routes.grouped("users")
  12. rts.get(use: index)
  13. rts.get(":userid", ":password", use: login)
  14. rts.post(use: create)
  15. rts.put(use: update)
  16. rts.group(":id") { todo in
  17. rts.delete(use: delete)
  18. }
  19. }
  20. func login(req: Request) async throws -> mdlUser{
  21. try await mdlUser.query(on: req.db)
  22. .with(\.$roles)
  23. .with(\.$division)
  24. .with(\.$gate)
  25. .with(\.$location)
  26. .filter(\.$username == req.parameters.get("userid"))
  27. .filter( \.$password == req.parameters.get("password"))
  28. .first()!
  29. }
  30. func index(req: Request) async throws -> [mdlUser] {
  31. try await mdlUser.query(on: req.db).with(\.$roles).all()
  32. }
  33. func create(req: Request) async throws -> mdlUser {
  34. let obj = try req.content.decode(mdlUser.self)
  35. try await obj.save(on: req.db)
  36. return obj
  37. }
  38. func update(req: Request) async throws -> mdlUser{
  39. let obj = try req.content.decode(mdlUser.self)
  40. let dbobj = try await mdlUser.query(on: req.db).filter(\.$id == obj.id!).first()!
  41. dbobj.firstname = obj.firstname
  42. dbobj.lastname = obj.lastname
  43. dbobj.email = obj.email
  44. dbobj.password = obj.password
  45. dbobj.updatedate = Date()
  46. dbobj.updateuserid = -1
  47. try await dbobj.update(on: req.db)
  48. return dbobj
  49. }
  50. func delete(req: Request) async throws -> HTTPStatus {
  51. guard let obj = try await mdlUser.find(req.parameters.get("id"), on: req.db) else {
  52. throw Abort(.notFound)
  53. }
  54. try await obj.delete(on: req.db)
  55. return .noContent
  56. }
  57. }