CloudComputingUTN

Cloud Computing

El propósito de este proyecto es demostrar un ejemplo de una aplicación ASP.NET Core que pueda ser usado por los alumnos de la clase de Gestión del Proceso de Desarrollo de Software en la carrera de Ingeniería en Tecnologías de la Información de la Universidad Tecnologóca de Nogales.

La solución cuenta con dos proyectos de tipo ASP.NET Core (MVC y RESTful API) con conexiones a bases de datos de SQL Server, MySQL (tanto locales como en Amazon Web Services RDS) así como SQLite de manera local usando Entity Framework Core y el patrón de diseño Respository para cualquier usar motor de base de datos.

Recomendaciones

El proyecto está hecho en .NET 7, por lo que es importante instalar tanto el SDK como el ASP.NET Core Runtime antes de ejecutarlo si no cuentas con ello. Puedes verificar si tienes el SDK instalado ejecutando el siguiente comando en la terminal o Powershell:

dotnet --info

En caso de estar instalado, el comando regresará algo parecido a esto:
Respuesta del comando dotnet --info en PowerShell

En caso de no tener una respuesta similar a la anterior:

Opcional, también se recomienda instalar las siguientes herramientas/software para facilitar el desarrollo si no cuentas con ellas aún:

Componentes de la Solución

La solución se compone de distintos proyectos individuales:

Solution Items

Este directorio contiene archivos para configurar el control de versiones, así como el README del proyecto y archivos para la publicación en AWS.

CloudComputingUTN.SQLServer

Este directorio contiene dos scripts de SQL para crear la base de datos y crear un usuario de SQL para la conexión con el proyecto.

CloudComputingUTN.MySQL

Este directorio contiene los scripts SQL usados para crear la base de datos y configurar el usuario en la base de datos MySQL.

CloudComputingUTN.DataAccessLayer

Este proyecto es una librería de clases para formar los DTO (Data Transfer Object) de las entidades.

CloudComputingUTN.Entities

Este proyecto contiene las entidades que representan las tablas de la base de datos.

CloudComputingUTN.Middleware

Este proyecto contiene el contexto de EF Core, así como el repositorio y la implementación del repositorio de métodos y funciones de interacció con la base de datos.

CloudComputingUTN.Middleware.UnitTests

Este proyecto contiene las pruebas unitarias del repositorio de métodos y funciones de interacción con la base de datos.

CloudComputingUTN.Service

Este proyecto representa una RESTful API con Swagger usando los mismos métodos y funciones de acceso a la base de datos que CloudComputingUTN.WebApp.

CloudComputingUTN.Service.UnitTests

Este proyecto contiene las pruebas unitarias de la RESTful API CloudComputingUTN.Service

CloudComputingUTN.Sqlite

Este proyecto es para la configuración de una base de datos en memoria de SQLite.

CloudComputingUTN.WebApp

Este proyecto es el sitio web MVC con la base de datos.

Instrucciones

Configurar Base de datos SQLite

Los proyectos CloudComputingUTN.WebApp y CloudComputingUTN.Service están configurados de la misma manera. Ambos se ejecutan con una base de datos SQLite en memoria por defecto.

Configurar Base de datos en SQL Server

Primero, debes ejecutar el script llamado MuseumDb.sql localizado en el directorio CloudComputingUTN.SQLServer en tu instancia de MSSQL. Una vez creada la base de datos de manera satisfactoria, el siguiente paso es ejecutar el script SQL_Login_Setup.sql para crear el usuario de SQL Server que se usa en la cadena de conexión. Los cambios surtirán efectos al reiniciar el servicio de MSSQLSERVER.

En caso de ejecutarse en localhost (127.0.0.1) no debe realizarase cambio en la cadena de conexión.

En caso contrario debes modificar la propiedad Data Source de la cadena de conexión MSSQL en los archivos appsettings.json de los proyectos CloudComputingUTN.WebApp y CloudComputingUTN.Service de esta manera sin corchetes []:

 "ConnectionStrings": {
    "MSSQL": "Data Source=[TU ENDPOINT DE MSSQL EN AWS RDS AQUI];Initial Catalog=MuseumDb;User ID=museumDb_Developer;Pwd=$tr0ng_p4$$w0rd;TrustServerCertificate=True",
	"MySQL": "server=localhost;database=MuseumDb;user=museumDb_Developer;pwd=$tr0ng_p4$$w0rd"
  }

Configurar Base de datos en MySQL

Primero, debes ejecutar el script llamado MuseumDB.sql localizado el directorio CloudComputingUTN.MySQL en tu instancia de MySQL. Una vez creada la base de datos de manera satisfactoria, el siguiente paso es ejecutar el script UserSetup.sql para crear el usuario de SQL Server que se usa en la cadena de conexión.

En caso de ejecutarse en localhost (127.0.0.1) no debe realizarase cambio en la cadena de conexión.

En caso contrario debes modificar la propiedad server de la cadena de conexión MySQL en los archivos appsettings.json de los proyectos CloudComputingUTN.WebApp y CloudComputingUTN.Service de esta manera sin corchetes []:

 "ConnectionStrings": {
    "MSSQL": "Data Source=localhost;Initial Catalog=MuseumDb;User ID=museumDb_Developer;Pwd=$tr0ng_p4$$w0rd;TrustServerCertificate=True",
    "MySQL": "server=[TU ENDPOINT DE MSSQL EN AWS RDS];database=MuseumDb;user=museumDb_Developer;pwd=$tr0ng_p4$$w0rd"
  }

Cambiar tipo de base de datos

Los proyectos CloudComputingUTN.WebApp y CloudComputingUTN.Service están configurados de la misma manera. Ambos se ejecutan con una base de datos SQLite en memoria por defecto, pero pueden configurarse para ejecutarse con conexión a SQL Server o MySQL de manera local o en AWS RDS mediante símbolos condicionales de compilación.

Modificar los símbolos condicionales de compilación en los archivos .csproj

Por defecto, ambos archivos CloudComputingUTN.WebApp.csproj y CloudComputingUTN.Serivice.csproj tienen esta configuración que usará SQLite como base de datos:

  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
	<DefineConstants>$(DefineConstants);DATABASE_ENGINE_SQLITE</DefineConstants>
  </PropertyGroup>

  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
	  <DefineConstants>$(DefineConstants);DATABASE_ENGINE_SQLITE</DefineConstants>
  </PropertyGroup>

Para cambiar a Microsoft SQL Server debes remplazar ambos bloques PropertyGroup por los siguientes:

  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
	<DefineConstants>$(DefineConstants);DATABASE_ENGINE_MSSQL</DefineConstants>
  </PropertyGroup>

  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
	  <DefineConstants>$(DefineConstants);DATABASE_ENGINE_MSSQL</DefineConstants>
  </PropertyGroup>

Para cambiar a MySQL debes remplazar ambos bloques PropertyGroup por los siguientes:

  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
	<DefineConstants>$(DefineConstants);DATABASE_ENGINE_MYSQL</DefineConstants>
  </PropertyGroup>

  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
	  <DefineConstants>$(DefineConstants);DATABASE_ENGINE_MYSQL</DefineConstants>
  </PropertyGroup>

Modificar Símbolos Condicionales de Compilación en Visual Studio 2022

Por defecto, ambos proyectos CloudComputingUTN.WebApp.csproj y CloudComputingUTN.Serivice.csproj están configurados para usar SQLite como base de datos. Puedes modificar los símbolos condicionales de compilación de ambos proyectos CloudComputingUTN.WebApp y CloudComputingUTN.Service haciendo clic derecho en el proyecto y luego en Propiedades > Build > Conditional Compilation Symbols. Deben de llamarse exactamente igual a los especificados anteriormente:

Una vez modificada la condición de compilación puedes ejecutar de manera normal en Visual Studio o con F5.

Ejecutar en Visual Studio 2022

Abre la solución CloudComputingUTN.sln y ejecuta normalmente. Puedes configurar para que se ejecuten los proyectos CloudComputingUTN.Service y CloudComputingUTN.WebApp al mismo tiempo.

Ejecutar en Visual Studio Code

Abre el directorio CloudComputingUTN en Visual Code, selecciona CloudComputingUTN.WebApp.csproj o CloudComputingUTN.Service.csproj y presiona F5 para ejecutar. También puedes hacerlo mediante Run > Start Debugging o Run > Start Without Debugging.

Ejecutar en Terminal

Abre una terminal en la misma ruta del proyecto y ejecuta los siguientes comandos

Restaurar dependencias del proyecto

dotnet restore

Compilar proyecto

dotnet build

Ejecutar Pruebas Unitarias

dotnet test
Ejecutar CloudComputingUTN.WebApp
dotnet run --project CloudComputingUTN.WebApp/CloudComputingUTN.WebApp.csproj
Ejecutar CloudComputingUTN.Service
dotnet run --project CloudComputingUTN.WebApp/CloudComputingUTN.Service.csproj