Skip to content

Commit 7ede9fd

Browse files
committed
feat: implement API key generation and renewal functionality
1 parent c8f2ca8 commit 7ede9fd

File tree

10 files changed

+361
-196
lines changed

10 files changed

+361
-196
lines changed

cmd/main.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@ import (
1515

1616
// @title Portfolio Builder API
1717
// @version 1.0
18-
// @description Uma API open source para o gerenciamento de portfólios de desenvolvedores.
19-
// @host https://portfolio-builder.site
18+
// @description An open source API for managing developer portfolios.
2019
// @BasePath /api
20+
2121
func main() {
2222
config.LoadEnv()
2323

docs/docs.go

Lines changed: 78 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,14 @@ const docTemplate = `{
1717
"paths": {
1818
"/health": {
1919
"get": {
20-
"description": "Retorna uma mensagem simples para indicar que o servidor está rodando",
20+
"description": "Returns a simple message to confirm the server is running",
2121
"produces": [
2222
"application/json"
2323
],
2424
"tags": [
2525
"health"
2626
],
27-
"summary": "Verifica o status da API",
27+
"summary": "Check API health",
2828
"responses": {
2929
"200": {
3030
"description": "OK",
@@ -42,36 +42,36 @@ const docTemplate = `{
4242
"ApiKeyAuth": []
4343
}
4444
],
45-
"description": "Retorna todos os projetos com paginação, ordenação e total de registros",
45+
"description": "Returns all user's projects with pagination and sorting",
4646
"produces": [
4747
"application/json"
4848
],
4949
"tags": [
5050
"Projects"
5151
],
52-
"summary": "Lista todos os projetos do usuário",
52+
"summary": "Get all projects",
5353
"parameters": [
5454
{
5555
"type": "integer",
56-
"description": "Página atual",
56+
"description": "Current page",
5757
"name": "page",
5858
"in": "query"
5959
},
6060
{
6161
"type": "integer",
62-
"description": "Tamanho da página",
62+
"description": "Page size",
6363
"name": "size",
6464
"in": "query"
6565
},
6666
{
6767
"type": "string",
68-
"description": "Campo para ordenar (ex: name, created_at)",
68+
"description": "Sort field (e.g. name, created_at)",
6969
"name": "sort",
7070
"in": "query"
7171
},
7272
{
7373
"type": "string",
74-
"description": "Ordem (asc ou desc)",
74+
"description": "Sort order (asc or desc)",
7575
"name": "order",
7676
"in": "query"
7777
}
@@ -100,7 +100,7 @@ const docTemplate = `{
100100
"ApiKeyAuth": []
101101
}
102102
],
103-
"description": "Cria um novo projeto para o usuário autenticado",
103+
"description": "Creates a new project for the authenticated user",
104104
"consumes": [
105105
"application/json"
106106
],
@@ -110,10 +110,10 @@ const docTemplate = `{
110110
"tags": [
111111
"Projects"
112112
],
113-
"summary": "Cria um novo projeto",
113+
"summary": "Create a project",
114114
"parameters": [
115115
{
116-
"description": "Dados do projeto",
116+
"description": "Project data",
117117
"name": "project",
118118
"in": "body",
119119
"required": true,
@@ -157,17 +157,17 @@ const docTemplate = `{
157157
"ApiKeyAuth": []
158158
}
159159
],
160-
"description": "Exporta todos os projetos do usuário autenticado em formato CSV",
160+
"description": "Exports all authenticated user's projects in CSV format",
161161
"produces": [
162162
"text/csv"
163163
],
164164
"tags": [
165165
"Projects"
166166
],
167-
"summary": "Exporta projetos para CSV",
167+
"summary": "Export projects to CSV",
168168
"responses": {
169169
"200": {
170-
"description": "Arquivo CSV",
170+
"description": "CSV file",
171171
"schema": {
172172
"type": "string"
173173
}
@@ -191,18 +191,18 @@ const docTemplate = `{
191191
"ApiKeyAuth": []
192192
}
193193
],
194-
"description": "Retorna um projeto específico do usuário autenticado",
194+
"description": "Returns a specific project by ID for the authenticated user",
195195
"produces": [
196196
"application/json"
197197
],
198198
"tags": [
199199
"Projects"
200200
],
201-
"summary": "Busca um projeto por ID",
201+
"summary": "Get project by ID",
202202
"parameters": [
203203
{
204204
"type": "string",
205-
"description": "ID do projeto",
205+
"description": "Project ID",
206206
"name": "id",
207207
"in": "path",
208208
"required": true
@@ -241,7 +241,7 @@ const docTemplate = `{
241241
"ApiKeyAuth": []
242242
}
243243
],
244-
"description": "Atualiza um projeto existente do usuário autenticado",
244+
"description": "Updates a project of the authenticated user",
245245
"consumes": [
246246
"application/json"
247247
],
@@ -251,17 +251,17 @@ const docTemplate = `{
251251
"tags": [
252252
"Projects"
253253
],
254-
"summary": "Atualiza um projeto",
254+
"summary": "Update a project",
255255
"parameters": [
256256
{
257257
"type": "string",
258-
"description": "ID do projeto",
258+
"description": "Project ID",
259259
"name": "id",
260260
"in": "path",
261261
"required": true
262262
},
263263
{
264-
"description": "Dados do projeto atualizado",
264+
"description": "Updated project data",
265265
"name": "project",
266266
"in": "body",
267267
"required": true,
@@ -315,18 +315,18 @@ const docTemplate = `{
315315
"ApiKeyAuth": []
316316
}
317317
],
318-
"description": "Remove um projeto do usuário autenticado",
318+
"description": "Deletes a project from the authenticated user",
319319
"produces": [
320320
"application/json"
321321
],
322322
"tags": [
323323
"Projects"
324324
],
325-
"summary": "Deleta um projeto",
325+
"summary": "Delete a project",
326326
"parameters": [
327327
{
328328
"type": "string",
329-
"description": "ID do projeto",
329+
"description": "Project ID",
330330
"name": "id",
331331
"in": "path",
332332
"required": true
@@ -370,18 +370,18 @@ const docTemplate = `{
370370
"ApiKeyAuth": []
371371
}
372372
],
373-
"description": "Alterna o status de favorito de um projeto do usuário",
373+
"description": "Toggles the favorite status of a project",
374374
"produces": [
375375
"application/json"
376376
],
377377
"tags": [
378378
"Projects"
379379
],
380-
"summary": "Favorita/Desfavorita um projeto",
380+
"summary": "Toggle favorite",
381381
"parameters": [
382382
{
383383
"type": "string",
384-
"description": "ID do projeto",
384+
"description": "Project ID",
385385
"name": "id",
386386
"in": "path",
387387
"required": true
@@ -417,7 +417,7 @@ const docTemplate = `{
417417
},
418418
"/register": {
419419
"post": {
420-
"description": "Cria um novo usuário na plataforma com nome, email e senha",
420+
"description": "Creates a new user with name, email, and password",
421421
"consumes": [
422422
"application/json"
423423
],
@@ -427,10 +427,10 @@ const docTemplate = `{
427427
"tags": [
428428
"auth"
429429
],
430-
"summary": "Registra um novo usuário",
430+
"summary": "Registers a new user",
431431
"parameters": [
432432
{
433-
"description": "Dados para registro",
433+
"description": "User registration data",
434434
"name": "registerData",
435435
"in": "body",
436436
"required": true,
@@ -466,6 +466,52 @@ const docTemplate = `{
466466
}
467467
}
468468
}
469+
},
470+
"/user/api-key": {
471+
"post": {
472+
"security": [
473+
{
474+
"ApiKeyAuth": []
475+
}
476+
],
477+
"description": "Generates a new API key for the authenticated user and replaces the old one",
478+
"produces": [
479+
"application/json"
480+
],
481+
"tags": [
482+
"auth"
483+
],
484+
"summary": "Rotate the user's API key",
485+
"responses": {
486+
"200": {
487+
"description": "API key successfully rotated",
488+
"schema": {
489+
"type": "object",
490+
"additionalProperties": {
491+
"type": "string"
492+
}
493+
}
494+
},
495+
"404": {
496+
"description": "User not found",
497+
"schema": {
498+
"type": "object",
499+
"additionalProperties": {
500+
"type": "string"
501+
}
502+
}
503+
},
504+
"500": {
505+
"description": "Internal server error",
506+
"schema": {
507+
"type": "object",
508+
"additionalProperties": {
509+
"type": "string"
510+
}
511+
}
512+
}
513+
}
514+
}
469515
}
470516
},
471517
"definitions": {
@@ -591,11 +637,11 @@ const docTemplate = `{
591637
// SwaggerInfo holds exported Swagger Info so clients can modify it
592638
var SwaggerInfo = &swag.Spec{
593639
Version: "1.0",
594-
Host: "https://portfolio-builder.site",
640+
Host: "",
595641
BasePath: "/api",
596642
Schemes: []string{},
597643
Title: "Portfolio Builder API",
598-
Description: "Uma API open source para o gerenciamento de portfólios de desenvolvedores.",
644+
Description: "An open source API for managing developer portfolios.",
599645
InfoInstanceName: "swagger",
600646
SwaggerTemplate: docTemplate,
601647
LeftDelim: "{{",

0 commit comments

Comments
 (0)