implement graphQL and init postgres

This commit is contained in:
Fran Jurmanović
2025-07-06 19:19:36 +02:00
parent 016728532c
commit 26a0d33592
25 changed files with 1713 additions and 314 deletions

View File

@@ -4,6 +4,7 @@ import (
"context"
"fmt"
"omega-server/local/middleware"
"omega-server/local/model"
"omega-server/local/service"
"omega-server/local/utl/common"
"omega-server/local/utl/error_handler"
@@ -52,7 +53,7 @@ func NewMembershipController(service *service.MembershipService, auth *middlewar
// Login handles user login.
func (c *MembershipController) Login(ctx *fiber.Ctx) error {
type request struct {
Username string `json:"username"`
Email string `json:"email"`
Password string `json:"password"`
}
@@ -62,7 +63,7 @@ func (c *MembershipController) Login(ctx *fiber.Ctx) error {
}
logging.Debug("Login request received")
token, err := c.service.Login(ctx.UserContext(), req.Username, req.Password)
token, err := c.service.Login(ctx.UserContext(), req.Email, req.Password)
if err != nil {
return c.errorHandler.HandleAuthError(ctx, err)
}
@@ -72,23 +73,35 @@ func (c *MembershipController) Login(ctx *fiber.Ctx) error {
// CreateUser creates a new user.
func (mc *MembershipController) CreateUser(c *fiber.Ctx) error {
type request struct {
Username string `json:"username"`
Password string `json:"password"`
Role string `json:"role"`
}
var req request
var req model.UserCreateRequest
if err := c.BodyParser(&req); err != nil {
return mc.errorHandler.HandleParsingError(c, err)
}
user, err := mc.service.CreateUser(c.UserContext(), req.Username, req.Password, req.Role)
// Validate request
if err := req.Validate(); err != nil {
return mc.errorHandler.HandleValidationError(c, err, "user_create_request")
}
// Map to domain model
user, err := req.ToUser()
if err != nil {
return mc.errorHandler.HandleValidationError(c, err, "user_mapping")
}
// Extract role names from request
roleIDs := req.RoleIDs
if len(roleIDs) == 0 {
roleIDs = []string{"user"} // default role
}
// Call service with domain model
createdUser, err := mc.service.CreateUser(c.UserContext(), user, roleIDs)
if err != nil {
return mc.errorHandler.HandleServiceError(c, err)
}
return c.JSON(user)
return c.JSON(createdUser.ToResponse())
}
// ListUsers lists all users.
@@ -98,7 +111,13 @@ func (mc *MembershipController) ListUsers(c *fiber.Ctx) error {
return mc.errorHandler.HandleServiceError(c, err)
}
return c.JSON(users)
// Convert to response format
userResponses := make([]*model.UserResponse, len(users))
for i, user := range users {
userResponses[i] = user.ToResponse()
}
return c.JSON(userResponses)
}
// GetUser gets a single user by ID.
@@ -113,7 +132,7 @@ func (mc *MembershipController) GetUser(c *fiber.Ctx) error {
return mc.errorHandler.HandleNotFoundError(c, "User")
}
return c.JSON(user)
return c.JSON(user.ToResponse())
}
// GetMe returns the currently authenticated user's details.
@@ -128,10 +147,7 @@ func (mc *MembershipController) GetMe(c *fiber.Ctx) error {
return mc.errorHandler.HandleNotFoundError(c, "User")
}
// Sanitize the user object to not expose password
user.PasswordHash = ""
return c.JSON(user)
return c.JSON(user.ToResponse())
}
// DeleteUser deletes a user.
@@ -156,17 +172,22 @@ func (mc *MembershipController) UpdateUser(c *fiber.Ctx) error {
return mc.errorHandler.HandleUUIDError(c, "user ID")
}
var req service.UpdateUserRequest
var req model.UserUpdateRequest
if err := c.BodyParser(&req); err != nil {
return mc.errorHandler.HandleParsingError(c, err)
}
user, err := mc.service.UpdateUser(c.UserContext(), id, req)
// Validate request
if err := req.Validate(); err != nil {
return mc.errorHandler.HandleValidationError(c, err, "user_update_request")
}
user, err := mc.service.UpdateUser(c.UserContext(), id, &req)
if err != nil {
return mc.errorHandler.HandleServiceError(c, err)
}
return c.JSON(user)
return c.JSON(user.ToResponse())
}
// GetRoles returns all available roles.