1package server
2
3import (
4 "github.com/google/uuid"
5 "github.com/haileyok/cocoon/internal/helpers"
6 "github.com/haileyok/cocoon/models"
7 "github.com/labstack/echo/v4"
8)
9
10type ComAtprotoServerCreateInviteCodeRequest struct {
11 UseCount int `json:"useCount" validate:"required"`
12 ForAccount *string `json:"forAccount,omitempty"`
13}
14
15type ComAtprotoServerCreateInviteCodeResponse struct {
16 Code string `json:"code"`
17}
18
19func (s *Server) handleCreateInviteCode(e echo.Context) error {
20 ctx := e.Request().Context()
21 logger := s.logger.With("name", "handleServerCreateInviteCode")
22
23 var req ComAtprotoServerCreateInviteCodeRequest
24 if err := e.Bind(&req); err != nil {
25 logger.Error("error binding", "error", err)
26 return helpers.ServerError(e, nil)
27 }
28
29 if err := e.Validate(req); err != nil {
30 logger.Error("error validating", "error", err)
31 return helpers.InputError(e, nil)
32 }
33
34 ic := uuid.NewString()
35
36 var acc string
37 if req.ForAccount == nil {
38 acc = "admin"
39 } else {
40 acc = *req.ForAccount
41 }
42
43 if err := s.db.Create(ctx, &models.InviteCode{
44 Code: ic,
45 Did: acc,
46 RemainingUseCount: req.UseCount,
47 }, nil).Error; err != nil {
48 logger.Error("error creating invite code", "error", err)
49 return helpers.ServerError(e, nil)
50 }
51
52 return e.JSON(200, ComAtprotoServerCreateInviteCodeResponse{
53 Code: ic,
54 })
55}