GithubHelp home page GithubHelp logo

eduardoprofe666 / aicadocsapi Goto Github PK

View Code? Open in Web Editor NEW
1.0 1.0 1.0 35.2 MB

📝 Proyecto de Prácticas I de Sistema de Documentación de Aica en Asp.Net 8.0

Home Page: https://aicadocs.onrender.com

License: MIT License

C# 99.11% Dockerfile 0.89%
aica api-rest aspnet aspnet-core docs dotnet minimal-api webapi

aicadocsapi's Introduction

AicaDocsApi

C# .Net Swagger Postgres Docker Render Railway Test

Proyecto de Práctica I de Ingeniería Informática.

Se creó un sistema de para el control de la documentación para el Sistema de Gestión de Calidad de la Empresa Laboratorios Farmacéuticos de AICA+.

Se creó una minimal API en Asp.Net Core 8 cumpliendo con todos los requisitos capturados.

Se creó una base de datos en PostgreSql robusta con dichos requisitos, y para el almacenamiento de los ficheros se empleó MinIO

📖 Problemática

En los Laboratorios Aica se desea llevar un control de la documentación del Sistema de Gestión de Calidad de la empresa. Esta documentación se organiza de acuerdo a un alcance, que puede ser Rector (aplica en toda la empresa) o específico (aplica en una UEB); un proceso, que corresponde con uno de los procesos definidos en el mapa de procesos de la organización; y un tipo de documento, que es definido por los especialistas del Área de Calidad. De estos documentos se conoce el código, título, edición, páginas, fecha de vigencia y dos archivos asociados, uno en formato pdf y otro en word. Se desea crear un sistema que permita la creación y visualización de esta documentación. Para ello, se definen los siguientes requisitos:

  • Creación de documentos
  • Búsqueda de documentos, con filtros asociados a cada propiedad del documento
  • Descargar documentos, donde se especifica que archivo se desea descargar (pdf o word) y un motivo de la descarga

🖼️ Modelo físico de la base de datos

modelo fisico

📶 Configuración de la conexión a la base de datos

Para poder configurar la conexión a la base de datos en PostgreSQL siga los siguientes pasos:

  1. Cree/Actualice en la ruta raíz del proyecto un archivo appsettings.json
  2. En dicho archivo coloque las siguientes líneas, sustituyendo INFO por la información correspondiente en cada caso:
}
    (...),
    "ConnectionStrings": {
        "PostgreSQLConnection": "Server=INFO;Port=INFO;Database=INFO;User Id=INFO;password=INFO"
    }
}
  1. Si no tiene la base de datos de Aica, en la consola escriba el siguiente comando: dotnet ef database update. Asegúrese que tiene las Migrations, si no ejecute antes el comando: dotnet ef migrations add InitialCreate

📶 Configuración de la conexión a MinIO

Important

Se debe tener instalado MinIO Server y tener configurado el usuario necesario con permiso de escritura-lectura y el bucket en el cual se almacenarán los datos con la estructura de carpetas /pdf y /word

Para poder configurar la conexión a MinIO siga los siguientes pasos:

  1. Cree/Actualice en la ruta raíz del proyecto un archivo appsettings.json
  2. En dicho archivo coloque las siguientes líneas, sustituyendo INFO por la información correspondiente en cada caso:
}
    (...),
    "Minio": {
       "Endpoint": "INFO",
       "AccessKey": "INFO",
       "SecretKey": "INFO",
       "Bucket": "INFO"
    }
}

Otra posible forma de probar la api es usando el servidor de prueba en la nube de MinIO, usando los siguientes datos en el archivo appsettings.json:

}
    (...),
    "Minio": {
       "Endpoint": "play.min.io",
       "AccessKey": "testuser",
       "SecretKey": "testuser",
       "Bucket": "aica-docs"
    }
}

🚀 Despliegue

Note

Estos despliegues son solamente para probar la Api en entornos de despliegue, no es para el uso extensivo de la misma.

Se realizó un despliegue de prueba de los 3 servicios básicos de la API:

  • Despliegue del servidor Asp.Net en Render
  • Despliegue de la base de datos en ElephantSQL
  • Despliegue del servidor de MinIO en Railway

🎦 AicaDocs UI

Se realizó una prueba en Razor Pages para ilustrar como sería un posible escenario de consumo de la api. La página se encuentra en el siguiente enlace

🎯 Pruebas de integración automatizadas

Se diseñaron y ejecutaron pruebas de integración automatizadas a la api en la rama . El último resultado de las pruebas se encuentra en el siguiente enlace

👥 Autores

Lilian Rosa Rojas Rodríguez
Lilian Rosa Rojas Rodríguez

Eduardo Alejandro González Martell
Eduardo Alejandro González Martell

👥 Tutores

  • Dr. Carlos Ramón López Paz
  • Msc. Ana Lilian Infante Abreu

👥 Especialistas

Ing. Pedro Velázquez Borrero
Ing. Pedro Velázquez Borrero

aicadocsapi's People

Contributors

eduardoprofe666 avatar lilyrosa avatar

Stargazers

 avatar

Watchers

 avatar

Forkers

lilyrosa

aicadocsapi's Issues

FluentValidation result

The way you implemented it has a mayor drawback: you are changing the contract, and also i think the new contract isn't documented in Swagger. All your endpoints return ApiResponde, but here you are returning ValidationProblem, which isn't ApiResponse instance. So in this case, api clients need to hande two api contracts and two error contracts: ValidationProblem and ApiResponse.Error

Validation folder structure

Group both read and write validations in the same aggregate (CreateDocumentValidator and FilterDocumentValidator in Document)

ValidateUtils is wrong

The only correct place where services from DI are method parameters is in Minimal Endpoints. In any other case, it must be a dependency of the class, and it must be resolved from the constructor

Configuration in dotnet

ASP NET Core has built in support for configuration from different sources like host environment, json files, dotnet-secrets and so on. It's the recommended way to configure not only ASP NET Core applicatios but any dotnet application, because all the logic is in Microsoft.Extensions.Configuration.* namespaces

What do to:

  1. Put your configuration in appsettings.ENVIRONMENT.json. For connection strings, there is a specific key in that file, ConnectionStrings, where you must put all your connections.
  2. Access configuration using builder.Configuration.GetSection() and for connection strings, builder.Configuration.GetConnectionString()
  3. If you need to bind a configuration section to an object, you can use builder.Service.Configure()

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.