https://github.com/luisgomez29/antpack-go
API REST para la gestión de usuarios con GO.
https://github.com/luisgomez29/antpack-go
api go golang mvc rest-api
Last synced: 6 months ago
JSON representation
API REST para la gestión de usuarios con GO.
- Host: GitHub
- URL: https://github.com/luisgomez29/antpack-go
- Owner: luisgomez29
- Created: 2021-08-10T21:17:53.000Z (almost 5 years ago)
- Default Branch: main
- Last Pushed: 2021-08-13T19:17:27.000Z (almost 5 years ago)
- Last Synced: 2024-06-21T04:50:59.987Z (about 2 years ago)
- Topics: api, go, golang, mvc, rest-api
- Language: Go
- Homepage:
- Size: 112 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
## Prueba técnica en Go - AntPack
API REST para la gestión de usuarios con GO.
## Requerimientos
**GO 1.16**
**PostgreSQL 12, 13**
## Instalación en local
1. Instalar la versión de GO 1.16 o posterior de acuerdo a su sistema operativo.
[Descargar GO](https://golang.org/dl/)
2. Clonar el proyecto.
3. Crear la base de datos.
4. Migraciones usando `golang-migrate` **(opcional)**.
1. Descargar el ejecutable de `golang-migrate` para ejecutar las migraciones:
[Descargar golang-migrate](https://github.com/golang-migrate/migrate/releases)
2. En Windows guardar el archivo en la siguiente ruta:
```bash
c:/go-migrate/migrate.exe
```
Si elige otra ruta para guardar el ejecutable debe configurar el archivo `migrate.sh`.
3. Configurar DSN para conectarse a la base de datos en el archivo `migrate.sh`.
4. Para ejecutar las migraciones abrir la consola `Git Bash` y usar el siguiente comando:
```bash
export DBPWD=mypassword && . migrate.sh up
```
Donde el valor de la variable de entorno `DBPWD` es la contraseña de la base de datos.
5. Dentro de la carpeta [db](./migrations/db) de `migrations` encontrará el script para insertar registros de
prueba.
5. Migraciones usando **pgAdmin**:
1. Dentro de la carpeta [versions](./migrations/versions) de `migrations` encontrará el script para crear las tablas
de la base de datos y en la carpeta [db](./migrations/db) el script para insertar registros de prueba.
6. Configurar variables de entorno en el archivo `.env` (Ver el archivo `.env.example`).
7. Ejecutar el servidor local:
```bash
go run main.go
```
## Esquema
Ver [Migraciones](./migrations)
## Endpoints
En la carpeta [postman](./postman) se encuentra la colección para consumir los endpoints.
La API REST proporciona las siguientes rutas:
### Auth
| Name | Route | Protected | Method |
| ---- | ----- | --------- | ------ |
| Signup | /signup | No | POST |
| Login | /login | No | POST |
### Users
| Name | Route | Protected | Method |
| ---- | ----- | --------- | ------ |
| Get all users | /users | Yes | GET |
| Get User | /users/:id | Yes | GET |
## Tests
Los tests se encuentran dentro de la carpeta [tests](./tests). Se prueban los endpoints de la API.
Se utilizan los siguientes paquetes de Go:
* Aserciones: [testify](https://github.com/stretchr/testify)
* Generación de [**stubs**](https://stackoverflow.com/a/14081911) para simulación de
dependencias: [gomock](https://github.com/golang/mock)
* Generador de datos aleatorios: [gofakeit](https://github.com/brianvoe/gofakeit)
Para ejecutar los tests use el siguiente comando:
```bash
cd tests && go test -v ./...
```
## Estructura del proyecto
Se utilizan los principios del patrón de diseño MVC para hacer mantenible y escalable el proyecto.
```
anpack-go
├── app Aplicación principal del proyecto.
│ ├── auth Servicio de autenticación.
│ ├── controllers Funciones de controlador para una ruta en particular.
│ ├── middlewares Middlewares que se utilizarán en el proyecto.
│ ├── models Tablas de la base de datos que se utilizarán como estructura de modelos.
│ ├── repositories Persistir los datos en la base de datos.
│ ├── resources Contiene estructuras que se usan como respuestas.
│ ├── ├── api Recursos asosiados a la API.
│ ├── ├── ├── errors Tipos y manejo de errores.
│ ├── ├── ├── requests Estructuras y otros modelos usados para hacer solicitudes.
│ ├── └── └── responses Estructuras y otros modelos usadas como respuesta.
│ ├── routes Rutas de la API.
│ ├── services Logica de negocio.
│ └── utils Funciones de ayuda utilizadas en todo el proyecto.
├── migrations Migraciones de base de datos
│ ├── db Archivos de consultas SQL.
│ └── versions Versiones individuales del esquema de la base de datos.
├── pkg Paquetes generales independientes del framework usado.
│ ├── config Archivos para leer variables de entorno.
│ ├── database Archivos para conectarse a base de datos.
│ ├── faker Generador de datos falsos aleatorios.
│ └── mock Archivos para simular la base de datos.
├── main.go Punto de entrada para iniciar el servidor.
├── .env.example Archivo de ejemplo para configurar las variables de entorno.
└── migrate.sh Script para ejecutar las migraciones de la base de datos.
```
## Autor
**Luis Guillermo Gómez**
- [Github](https://github.com/luisgomez29)