Skip to content

CristFlores/ecommerce-con-go

Repository files navigation

Backend en Go para un Ecommerce

Importante conocer que:

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.

Configuraciones iniciales del proyecto

.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/

Conexión al motor de base de datos - PostgreSQL

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

Variables de entorno

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

¿Cómo compilar el proyecto?

go build -o <project_name> ./cmd/*.go

¿Cómo ejecutar el proyecto compilado?

./<project_name>

Tipos de rutas

  • 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.

Levantar un contenedor de PostgreSQL con Docker

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

Para conectarnos a la base de datos dentro del contendenor de Docker hacemos lo siguiente:

docker exec -it <container_name> psql <db_name> <user_name>

Migrations

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/

Conexión HTTPS para configuración de Webhooks de Paypal usando una cuenta de ngrok

¿Qué es ngrok?

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 80

Para poder conseguir un token, hay que registrarse en la página de ngrok.

Creación de claves privada y pública en Linux

Creación de certificado privado en Linux (app.rsa): Módulo 5 del curso de Testing con Go

openssl genrsa -out app.rsa 1024

Creación de certificado público en Linux (app.rsa.pub): Módulo 5 del curso de Testing con Go

openssl rsa -in app.rsa -pubout > app.rsa.pub

Creación de claves privada y pública con SSH

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

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.

https://certbot.eff.org/

About

Backend para ecommerce con Go - integración con API de PayPal

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published