Spaces:
Sleeping
Sleeping
File size: 2,996 Bytes
7af3ebd | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 | package controllers
import (
"abdanhafidz.com/go-boilerplate/models/dto"
entity "abdanhafidz.com/go-boilerplate/models/entity"
"abdanhafidz.com/go-boilerplate/services"
"github.com/gin-gonic/gin"
"github.com/google/uuid"
)
type SuperAdminOrganizationController interface {
CreateOrganization(ctx *gin.Context)
ListOrganizations(ctx *gin.Context)
UpdateOrganization(ctx *gin.Context)
DeleteOrganization(ctx *gin.Context)
}
type superAdminOrganizationController struct {
orgService services.OrganizationService
}
func NewSuperAdminOrganizationController(orgService services.OrganizationService) SuperAdminOrganizationController {
return &superAdminOrganizationController{orgService: orgService}
}
func (c *superAdminOrganizationController) CreateOrganization(ctx *gin.Context) {
req := RequestJSON[dto.CreateOrganizationRequest](ctx)
callerID := ParseAccountId(ctx)
org, err := c.orgService.Create(ctx.Request.Context(), callerID, req)
if err != nil {
ResponseJSON(ctx, req, dto.OrganizationResponse{}, err)
return
}
res := toOrganizationResponse(org)
ResponseJSON(ctx, req, res, nil)
}
func (c *superAdminOrganizationController) ListOrganizations(ctx *gin.Context) {
callerID := ParseAccountId(ctx)
orgs, err := c.orgService.GetAll(ctx.Request.Context(), callerID)
if err != nil {
ResponseJSON(ctx, gin.H{}, []dto.OrganizationResponse{}, err)
return
}
res := make([]dto.OrganizationResponse, len(orgs))
for i, org := range orgs {
res[i] = toOrganizationResponse(org)
}
ResponseJSON(ctx, gin.H{}, res, nil)
}
func (c *superAdminOrganizationController) UpdateOrganization(ctx *gin.Context) {
idParam := ctx.Param("organization_id")
orgID, err := uuid.Parse(idParam)
if err != nil {
ResponseJSON(ctx, gin.H{"id": idParam}, dto.OrganizationResponse{}, err)
return
}
req := RequestJSON[dto.UpdateOrganizationRequest](ctx)
callerID := ParseAccountId(ctx)
org, err := c.orgService.Update(ctx.Request.Context(), callerID, orgID, req)
if err != nil {
ResponseJSON(ctx, req, dto.OrganizationResponse{}, err)
return
}
res := toOrganizationResponse(org)
ResponseJSON(ctx, req, res, nil)
}
func (c *superAdminOrganizationController) DeleteOrganization(ctx *gin.Context) {
idParam := ctx.Param("organization_id")
orgID, err := uuid.Parse(idParam)
if err != nil {
ResponseJSON[any](ctx, gin.H{"id": idParam}, nil, err)
return
}
callerID := ParseAccountId(ctx)
err = c.orgService.Delete(ctx.Request.Context(), callerID, orgID)
if err != nil {
ResponseJSON[any](ctx, gin.H{"id": orgID}, nil, err)
return
}
ResponseJSON(ctx, gin.H{"id": orgID}, gin.H{"message": "Organization deleted successfully"}, nil)
}
func toOrganizationResponse(org entity.Organization) dto.OrganizationResponse {
return dto.OrganizationResponse{
Id: org.Id,
Name: org.Name,
Slug: org.Slug,
CreatedAt: org.CreatedAt.Format("2006-01-02T15:04:05Z07:00"),
UpdatedAt: org.UpdatedAt.Format("2006-01-02T15:04:05Z07:00"),
}
}
|