module Web.Controller.StewardshipRoles where import Web.Types import Web.View.StewardshipRoles.Index import Web.View.StewardshipRoles.Show import Web.View.StewardshipRoles.New import Generated.Types import IHP.Prelude import IHP.ControllerPrelude instance Controller StewardshipRolesController where beforeAction = ensureIsUser action StewardshipRolesAction = autoRefresh do roles <- query @StewardshipRole |> orderByDesc #grantedAt |> fetch hubs <- query @Hub |> fetch render IndexView { roles, hubs } action ShowStewardshipRoleAction { stewardshipRoleId } = do role <- fetch stewardshipRoleId hub <- fetch role.hubId render ShowView { role, hub } action NewStewardshipRoleAction = do let role = newRecord @StewardshipRole hubs <- query @Hub |> orderByAsc #name |> fetch render NewView { role, hubs } action CreateStewardshipRoleAction = do let role = newRecord @StewardshipRole hubs <- query @Hub |> orderByAsc #name |> fetch role |> fill @'["hubId","roleName","assignedTo","notes"] |> validateField #roleName nonEmpty |> validateField #assignedTo nonEmpty |> ifValid \case Left r -> render NewView { role = r, hubs } Right r -> do r <- createRecord r setSuccessMessage "Stewardship role granted" redirectTo ShowStewardshipRoleAction { stewardshipRoleId = r.id } action RevokeRoleAction { stewardshipRoleId } = do role <- fetch stewardshipRoleId now <- getCurrentTime role |> set #revokedAt (Just now) |> updateRecord setSuccessMessage "Role revoked" redirectTo StewardshipRolesAction