Initial commit: Open sourcing all of the Maple Open Technologies code.

This commit is contained in:
Bartlomiej Mika 2025-12-02 14:33:08 -05:00
commit 755d54a99d
2010 changed files with 448675 additions and 0 deletions

View file

@ -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)
}

View file

@ -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)
}