module Server.Features.Teacher.DeleteQuiz open Giraffe open Domain open Domain.Contracts open Server.Store let private delete (store: Store) (ownerId: UserId) (req: DeleteQuizRequest) : Result = match store.TryGetQuiz req.QuizId with | None -> Error "Тест не найден" | Some quiz when quiz.OwnerId <> ownerId -> Error "Доступ запрещён" | Some _ -> if store.AnyAttemptsForQuiz req.QuizId then Error "Тест уже проходили, удаление невозможно" else store.RemoveQuiz req.QuizId Ok() let handler (store: Store) : HttpHandler = bindJson (fun req next ctx -> task { let result = Server.Auth.requireRole [ Teacher; Admin ] ctx.User |> Result.bind (fun uid -> delete store uid req) return! json result next ctx })