feat: Add user registration endpoint with JWT token generation and update API documentation

This commit is contained in:
Jean Jacques Avril 2025-03-10 22:44:16 +00:00
parent 9f8eab0fac
commit 460235b832
5 changed files with 256 additions and 0 deletions
backend

@ -729,6 +729,88 @@ const docTemplate = `{
}
}
},
"/auth/register": {
"post": {
"description": "Register a new user and get a JWT token",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"auth"
],
"summary": "Register",
"parameters": [
{
"description": "User data",
"name": "user",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/dto.UserCreateDto"
}
}
],
"responses": {
"201": {
"description": "Created",
"schema": {
"allOf": [
{
"$ref": "#/definitions/utils.Response"
},
{
"type": "object",
"properties": {
"data": {
"$ref": "#/definitions/dto.TokenDto"
}
}
}
]
}
},
"400": {
"description": "Bad Request",
"schema": {
"allOf": [
{
"$ref": "#/definitions/utils.Response"
},
{
"type": "object",
"properties": {
"error": {
"$ref": "#/definitions/utils.ErrorInfo"
}
}
}
]
}
},
"500": {
"description": "Internal Server Error",
"schema": {
"allOf": [
{
"$ref": "#/definitions/utils.Response"
},
{
"type": "object",
"properties": {
"error": {
"$ref": "#/definitions/utils.ErrorInfo"
}
}
}
]
}
}
}
}
},
"/companies": {
"get": {
"security": [

@ -723,6 +723,88 @@
}
}
},
"/auth/register": {
"post": {
"description": "Register a new user and get a JWT token",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"auth"
],
"summary": "Register",
"parameters": [
{
"description": "User data",
"name": "user",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/dto.UserCreateDto"
}
}
],
"responses": {
"201": {
"description": "Created",
"schema": {
"allOf": [
{
"$ref": "#/definitions/utils.Response"
},
{
"type": "object",
"properties": {
"data": {
"$ref": "#/definitions/dto.TokenDto"
}
}
}
]
}
},
"400": {
"description": "Bad Request",
"schema": {
"allOf": [
{
"$ref": "#/definitions/utils.Response"
},
{
"type": "object",
"properties": {
"error": {
"$ref": "#/definitions/utils.ErrorInfo"
}
}
}
]
}
},
"500": {
"description": "Internal Server Error",
"schema": {
"allOf": [
{
"$ref": "#/definitions/utils.Response"
},
{
"type": "object",
"properties": {
"error": {
"$ref": "#/definitions/utils.ErrorInfo"
}
}
}
]
}
}
}
}
},
"/companies": {
"get": {
"security": [

@ -686,6 +686,51 @@ paths:
summary: Get current user
tags:
- auth
/auth/register:
post:
consumes:
- application/json
description: Register a new user and get a JWT token
parameters:
- description: User data
in: body
name: user
required: true
schema:
$ref: '#/definitions/dto.UserCreateDto'
produces:
- application/json
responses:
"201":
description: Created
schema:
allOf:
- $ref: '#/definitions/utils.Response'
- properties:
data:
$ref: '#/definitions/dto.TokenDto'
type: object
"400":
description: Bad Request
schema:
allOf:
- $ref: '#/definitions/utils.Response'
- properties:
error:
$ref: '#/definitions/utils.ErrorInfo'
type: object
"500":
description: Internal Server Error
schema:
allOf:
- $ref: '#/definitions/utils.Response'
- properties:
error:
$ref: '#/definitions/utils.ErrorInfo'
type: object
summary: Register
tags:
- auth
/companies:
get:
consumes:

@ -261,6 +261,52 @@ func (h *UserHandler) Login(c *gin.Context) {
utils.SuccessResponse(c, http.StatusOK, tokenDTO)
}
// Register handles POST /auth/register
//
// @Summary Register
// @Description Register a new user and get a JWT token
// @Tags auth
// @Accept json
// @Produce json
// @Param user body dto.UserCreateDto true "User data"
// @Success 201 {object} utils.Response{data=dto.TokenDto}
// @Failure 400 {object} utils.Response{error=utils.ErrorInfo}
// @Failure 500 {object} utils.Response{error=utils.ErrorInfo}
// @Router /auth/register [post]
func (h *UserHandler) Register(c *gin.Context) {
// Parse request body
var userCreateDTO dto.UserCreateDto
if err := c.ShouldBindJSON(&userCreateDTO); err != nil {
utils.BadRequestResponse(c, "Invalid request body: "+err.Error())
return
}
// Convert DTO to model
userCreate := convertCreateDTOToModel(userCreateDTO)
// Create user in the database
user, err := models.CreateUser(c.Request.Context(), userCreate)
if err != nil {
utils.InternalErrorResponse(c, "Error creating user: "+err.Error())
return
}
// Generate JWT token
token, err := middleware.GenerateToken(user)
if err != nil {
utils.InternalErrorResponse(c, "Error generating token: "+err.Error())
return
}
// Return token
tokenDTO := dto.TokenDto{
Token: token,
User: convertUserToDTO(user),
}
utils.SuccessResponse(c, http.StatusCreated, tokenDTO)
}
// GetCurrentUser handles GET /auth/me
//
// @Summary Get current user

@ -18,6 +18,7 @@ func SetupRouter(r *gin.Engine) {
// Public routes
r.POST("/auth/login", userHandler.Login)
r.POST("/auth/register", userHandler.Register)
// API routes (protected)
api := r.Group("/api")