En Go le llamamos models a las estructuras de datos que vamos a utilizar en nuestro proyecto, en otros lenguajes se les conoce como clases o entidades.
Dentro de la carpeta de infrastructure se encuentran los puntos de entrada de la data (handler) y salidas (repository o en este caso postgres) de nuestro proyecto.
Dentro de la carpeta de domain creamos las interfaces que vamos a utilizar en nuestro proyecto y los casos de uso o también conocidos como servicios.
Interface (o puerto) para almacenar la información en la base de datos, en este proyecto le llamaremos Storage aunque en otros proyectos también se le conoce como Repository.
.editorconfig es un archivo donde se configura una guía de estilos para el proyecto. Ver https://editorconfig.org/
.gitignore es un archivo donde se especifican los archivos que no se deben subir al repositorio. Ver https://www.toptal.com/developers/gitignore/
Para este propósito usamos la librería pgx que es un driver para PostgreSQL. Ver: https://github.com/jackc/pgx
Documentación oficial desde go.dev: https://pkg.go.dev/github.com/jackc/pgx/v5
En el proyecto también usamos el paquete pgxpool que es un pool de conexiones para PostgreSQL. Ver: https://pkg.go.dev/github.com/jackc/pgx/v5/pgxpool
Hacemos uso de la librería godotenv para cargar las variables de entorno desde un archivo .env en el proyecto.
Crear archivo .env a partir de .env.example y modificar los valores de tus variables de entorno.
go get github.com/joho/godotenv@latest
go build -o <project_name> ./cmd/*.go
./<project_name>
- 1.- Publicas: No requieren autenticación.
- 2.- Privadas: Requieren autenticación (TOKEN). Todo lo que consulte es solo de su propio perfil.
- 3.- Admin: Requieren autenticación (TOKEN) y además el usuario debe tener permisos para poder acceder a cierta información.
Para este propósito usamos docker compose: ver el archivo docker-compose.yml, donde levantamos un contendor con la imagen de PostgreSQL, además de asignar un volumen para persistir los datos de la base de datos.
Comando de ejecución: docker-compose up -d --build
docker exec -it <container_name> psql <db_name> <user_name>
Para hacer las migraciones de la base de datos usamos el paquete: https://github.com/alexyslozada/migrations, que es un paquete que nos permite ejecutar las migraciones de la base de datos de forma automática.
De acuerdo con su documentación, basta con hacer lo siguiente:
$ go get -u github.com/alexyslozada/migrations/...
$ cd $GOPATH/src/github.com/alexyslozada/migrations
$ cp configuration.json.example configuration.json
// Edita el archivo configuration.json para que apunte a tu base de datos.
$ go build
$ ./migrations -config=/path/to/your/configuration.json -migration=/path/to/you/directory/contains/sql-files/ngrok es una herramienta que permite acceder a nuestro servidor local desde internet, sin necesidad de abrir puertos en nuestro router, ni de configurar nada en nuestra red local. Crea un tunel seguro entre nuestro servidor local y un servidor de ngrok, y nos permite acceder a nuestro servidor local desde cualquier parte del mundo.
Instalamos ngrok https://ngrok.com/download, en nuestra máquina local. En mi caso lo haré en un contenedor de Docker, tal como lo sugiere la documentación de ngrok.
docker run -it -e NGROK_AUTHTOKEN=<token> ngrok/ngrok http 80Para poder conseguir un token, hay que registrarse en la página de ngrok.
openssl genrsa -out app.rsa 1024
openssl rsa -in app.rsa -pubout > app.rsa.pub
ssh-keygen -t rsa -b 4096 -f app.rsa
Para ver el manual de ssh-keygen: man ssh-keygen y te mostrará la documentación completa de este comando.
Certbot is a free, open-source software tool that can automatically obtain and install HTTPS/SSL certificates from Let's Encrypt, a free certificate authority. Certbot is made by the Electronic Frontier Foundation (EFF), a non-profit organization that defends digital rights.
Certbot can be used on a wide variety of web servers, including Apache, Nginx, and Caddy. It is available for Windows, macOS, and Linux.