module Server.Features.Teacher.CreateTopic open Giraffe open Domain open Domain.Contracts open Server.Store let private create (store: Store) (ownerId: UserId) (req: CreateTopicRequest) : Result = if System.String.IsNullOrWhiteSpace req.Name then Error "Название темы не может быть пустым" else let topic: Topic = { Id = Id.newTopicId (); OwnerId = ownerId; Name = req.Name } store.AddTopic topic Ok topic let handler (store: Store) : HttpHandler = bindJson (fun req next ctx -> task { let result = Server.Auth.requireRole [ Teacher; Admin ] ctx.User |> Result.bind (fun uid -> create store uid req) return! json result next ctx })