Initial commit: Open sourcing all of the Maple Open Technologies code.
This commit is contained in:
commit
755d54a99d
2010 changed files with 448675 additions and 0 deletions
|
|
@ -0,0 +1,19 @@
|
|||
package inviteemail
|
||||
|
||||
import (
|
||||
"go.uber.org/zap"
|
||||
|
||||
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/config"
|
||||
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/interface/http/middleware"
|
||||
svc_inviteemail "codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/service/inviteemail"
|
||||
)
|
||||
|
||||
// ProvideSendInviteEmailHTTPHandler provides the send invite email HTTP handler for Wire DI
|
||||
func ProvideSendInviteEmailHTTPHandler(
|
||||
cfg *config.Config,
|
||||
logger *zap.Logger,
|
||||
service svc_inviteemail.SendInviteEmailService,
|
||||
mw middleware.Middleware,
|
||||
) *SendInviteEmailHTTPHandler {
|
||||
return NewSendInviteEmailHTTPHandler(cfg, logger, service, mw)
|
||||
}
|
||||
|
|
@ -0,0 +1,84 @@
|
|||
// Package inviteemail provides HTTP handlers for invitation email endpoints
|
||||
package inviteemail
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"net/http"
|
||||
|
||||
"github.com/gocql/gocql"
|
||||
"go.uber.org/zap"
|
||||
|
||||
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/config"
|
||||
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/config/constants"
|
||||
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/interface/http/middleware"
|
||||
svc_inviteemail "codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/service/inviteemail"
|
||||
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/pkg/httperror"
|
||||
)
|
||||
|
||||
// SendInviteEmailHTTPHandler handles POST /api/v1/invites/send-email requests
|
||||
type SendInviteEmailHTTPHandler struct {
|
||||
config *config.Config
|
||||
logger *zap.Logger
|
||||
service svc_inviteemail.SendInviteEmailService
|
||||
middleware middleware.Middleware
|
||||
}
|
||||
|
||||
// NewSendInviteEmailHTTPHandler creates a new handler for sending invitation emails
|
||||
func NewSendInviteEmailHTTPHandler(
|
||||
cfg *config.Config,
|
||||
logger *zap.Logger,
|
||||
service svc_inviteemail.SendInviteEmailService,
|
||||
mw middleware.Middleware,
|
||||
) *SendInviteEmailHTTPHandler {
|
||||
logger = logger.Named("SendInviteEmailHTTPHandler")
|
||||
return &SendInviteEmailHTTPHandler{
|
||||
config: cfg,
|
||||
logger: logger,
|
||||
service: service,
|
||||
middleware: mw,
|
||||
}
|
||||
}
|
||||
|
||||
// Pattern returns the URL pattern for this handler
|
||||
func (*SendInviteEmailHTTPHandler) Pattern() string {
|
||||
return "POST /api/v1/invites/send-email"
|
||||
}
|
||||
|
||||
// ServeHTTP implements http.Handler
|
||||
func (h *SendInviteEmailHTTPHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) {
|
||||
// Apply middleware (authentication required)
|
||||
h.middleware.Attach(h.Execute)(w, req)
|
||||
}
|
||||
|
||||
// Execute handles the actual request processing
|
||||
func (h *SendInviteEmailHTTPHandler) Execute(w http.ResponseWriter, r *http.Request) {
|
||||
ctx := r.Context()
|
||||
|
||||
// Get user ID from context (set by auth middleware)
|
||||
userID, ok := ctx.Value(constants.SessionUserID).(gocql.UUID)
|
||||
if !ok {
|
||||
h.logger.Error("User ID not found in context or invalid type")
|
||||
httperror.RespondWithError(w, r, httperror.NewForUnauthorizedWithSingleField("auth", "Authentication required"))
|
||||
return
|
||||
}
|
||||
|
||||
// Decode request body
|
||||
var req svc_inviteemail.SendInviteEmailRequestDTO
|
||||
if err := json.NewDecoder(r.Body).Decode(&req); err != nil {
|
||||
h.logger.Warn("Failed to decode request body", zap.Error(err))
|
||||
httperror.RespondWithError(w, r, httperror.NewForBadRequestWithSingleField("body", "Invalid request body"))
|
||||
return
|
||||
}
|
||||
|
||||
// Execute service
|
||||
response, err := h.service.Execute(ctx, userID, &req)
|
||||
if err != nil {
|
||||
httperror.RespondWithError(w, r, err)
|
||||
return
|
||||
}
|
||||
|
||||
// Return response
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
w.WriteHeader(http.StatusOK)
|
||||
json.NewEncoder(w).Encode(response)
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue