Created
January 22, 2024 21:06
-
-
Save scottoffen/3e44dafcc43dcc0136eca7e7b77b1582 to your computer and use it in GitHub Desktop.
Generate a WebApi project structure
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
if test -d src; then | |
rm -rf src | |
fi | |
while getopts n: flag | |
do | |
case "${flag}" in | |
n) projectName=${OPTARG};; | |
esac | |
done | |
BRed='\033[1;31m' # Bold Red | |
BGreen='\033[1;32m' # Bold Green | |
BYellow='\033[1;33m' # Bold Yellow | |
NC='\033[0m' # No Color | |
if test -z "$projectName"; then | |
echo -e "${BRed}No project name was provided!${NC}" | |
exit | |
else | |
echo -e "${BGreen}Generating: $projectName${NC}" | |
fi | |
################################################################################ | |
# Create source directory | |
################################################################################ | |
echo "Creating source directory..." | |
mkdir src | |
if test -d src; then | |
cd src | |
else | |
echo -e "${BRed}Unable to create src project${NC}" | |
exit | |
fi | |
################################################################################ | |
# Create solution file | |
################################################################################ | |
dotnet new sln --name $projectName | |
################################################################################ | |
# Create DomainModels, Mapper, and Utilities classlibs | |
################################################################################ | |
dotnet new classlib --name $projectName.DomainModels | |
dotnet new classlib --name $projectName.Mapper | |
dotnet new xunit --name $projectName.Mapper.Tests | |
dotnet new classlib --name $projectName.Utilities | |
dotnet new xunit --name $projectName.Utilities.Tests | |
if test -d $projectName.DomainModels; then | |
dotnet sln add $projectName.DomainModels | |
else | |
echo -e "${BRed}Unable to create $projectName.DomaiinModels project${NC}" | |
exit | |
fi | |
if test -d $projectName.Mapper; then | |
dotnet sln add $projectName.Mapper | |
cd $projectName.Mapper | |
dotnet add reference ../$projectName.DomainModels | |
dotnet add package AutoMapper -v 12.0.1 | |
cd .. | |
else | |
echo -e "${BRed}Unable to create $projectName.Mapper project${NC}" | |
exit | |
fi | |
if test -d $projectName.Mapper.Tests; then | |
dotnet sln add $projectName.Mapper.Tests | |
cd $projectName.Mapper.Tests | |
dotnet add reference ../$projectName.DomainModels | |
dotnet add reference ../$projectName.Mapper | |
dotnet add package AutoMapper -v 12.0.1 | |
dotnet add package Shouldly | |
cd .. | |
else | |
echo -e "${BRed}Unable to create $projectName.Mapper.Tests project${NC}" | |
exit | |
fi | |
if test -d $projectName.Utilities; then | |
dotnet sln add $projectName.Utilities | |
cd $projectName.Utilities | |
dotnet add reference ../$projectName.DomainModels | |
cd .. | |
else | |
echo -e "${BRed}Unable to create $projectName.Utilities project${NC}" | |
exit | |
fi | |
if test -d $projectName.Utilities.Tests; then | |
dotnet sln add $projectName.Utilities.Tests | |
cd $projectName.Utilities.Tests | |
dotnet add reference ../$projectName.DomainModels | |
dotnet add reference ../$projectName.Utilities | |
dotnet add package Shouldly | |
cd .. | |
else | |
echo -e "${BRed}Unable to create $projectName.Utilities project${NC}" | |
exit | |
fi | |
echo | |
echo -e "${BGreen}Utility projects created successfully${NC}" | |
echo | |
################################################################################ | |
# Create Infrastructure classlibs | |
################################################################################ | |
dotnet new classlib --name $projectName.Infrastructure | |
dotnet new classlib --name $projectName.Infrastructure.Default | |
dotnet new xunit --name $projectName.Infrastructure.Default.Tests | |
if test -d $projectName.Infrastructure; then | |
dotnet sln add $projectName.Infrastructure | |
cd $projectName.Infrastructure | |
dotnet add reference ../$projectName.DomainModels | |
dotnet add reference ../$projectName.Mapper | |
cd .. | |
else | |
echo -e "${BRed}Unable to create $projectName.Infrastructure project${NC}" | |
exit | |
fi | |
if test -d $projectName.Infrastructure.Default; then | |
dotnet sln add $projectName.Infrastructure.Default | |
cd $projectName.Infrastructure.Default | |
dotnet add reference ../$projectName.Infrastructure | |
dotnet add reference ../$projectName.DomainModels | |
dotnet add reference ../$projectName.Mapper | |
dotnet add reference ../$projectName.Utilities | |
cd .. | |
else | |
echo -e "${BRed}Unable to create $projectName.Infrastructure.Default project${NC}" | |
exit | |
fi | |
if test -d $projectName.Infrastructure.Default.Tests; then | |
dotnet sln add $projectName.Infrastructure.Default.Tests | |
cd $projectName.Infrastructure.Default.Tests | |
dotnet add reference ../$projectName.Infrastructure.Default | |
dotnet add reference ../$projectName.DomainModels | |
dotnet add reference ../$projectName.Mapper | |
dotnet add reference ../$projectName.Utilities | |
dotnet add package Shouldly | |
dotnet add package Moq | |
cd .. | |
else | |
echo -e "${BRed}Unable to create $projectName.Infrastructure.Default.Tests project${NC}" | |
exit | |
fi | |
echo | |
echo -e "${BGreen}Infrastructure projects created successfully${NC}" | |
echo | |
################################################################################ | |
# Create Engines classlibs | |
################################################################################ | |
dotnet new classlib --name $projectName.Engines | |
dotnet new classlib --name $projectName.Engines.Default | |
dotnet new xunit --name $projectName.Engines.Default.Tests | |
if test -d $projectName.Engines; then | |
dotnet sln add $projectName.Engines | |
cd $projectName.Engines | |
dotnet add reference ../$projectName.DomainModels | |
dotnet add reference ../$projectName.Mapper | |
dotnet add reference ../$projectName.Infrastructure | |
cd .. | |
else | |
echo -e "${BRed}Unable to create $projectName.Engines project${NC}" | |
exit | |
fi | |
if test -d $projectName.Engines.Default; then | |
dotnet sln add $projectName.Engines.Default | |
cd $projectName.Engines.Default | |
dotnet add reference ../$projectName.Engines | |
dotnet add reference ../$projectName.DomainModels | |
dotnet add reference ../$projectName.Mapper | |
dotnet add reference ../$projectName.Infrastructure | |
dotnet add reference ../$projectName.Utilities | |
cd .. | |
else | |
echo -e "${BRed}Unable to create $projectName.Engines.Default project${NC}" | |
exit | |
fi | |
if test -d $projectName.Engines.Default.Tests; then | |
dotnet sln add $projectName.Engines.Default.Tests | |
cd $projectName.Engines.Default.Tests | |
dotnet add reference ../$projectName.Engines.Default | |
dotnet add reference ../$projectName.DomainModels | |
dotnet add reference ../$projectName.Mapper | |
dotnet add reference ../$projectName.Infrastructure | |
dotnet add reference ../$projectName.Utilities | |
dotnet add package Shouldly | |
dotnet add package Moq | |
cd .. | |
else | |
echo -e "${BRed}Unable to create $projectName.Engines.Default.Test project${NC}" | |
exit | |
fi | |
echo | |
echo -e "${BGreen}Engine projects created successfully${NC}" | |
echo | |
################################################################################ | |
# Create Managers classlibs | |
################################################################################ | |
dotnet new classlib --name $projectName.Managers | |
dotnet new classlib --name $projectName.Managers.Default | |
dotnet new xunit --name $projectName.Managers.Default.Tests | |
if test -d $projectName.Managers; then | |
dotnet sln add $projectName.Managers | |
cd $projectName.Managers | |
dotnet add reference ../$projectName.DomainModels | |
dotnet add reference ../$projectName.Mapper | |
dotnet add reference ../$projectName.Infrastructure | |
dotnet add reference ../$projectName.Engines | |
cd .. | |
else | |
echo -e "${BRed}Unable to create $projectName.Managers project${NC}" | |
exit | |
fi | |
if test -d $projectName.Managers.Default; then | |
dotnet sln add $projectName.Managers.Default | |
cd $projectName.Managers.Default | |
dotnet add reference ../$projectName.Managers | |
dotnet add reference ../$projectName.DomainModels | |
dotnet add reference ../$projectName.Mapper | |
dotnet add reference ../$projectName.Infrastructure | |
dotnet add reference ../$projectName.Engines | |
dotnet add reference ../$projectName.Utilities | |
cd .. | |
else | |
echo -e "${BRed}Unable to create $projectName.Managers.Default project${NC}" | |
exit | |
fi | |
if test -d $projectName.Managers.Default.Tests; then | |
dotnet sln add $projectName.Managers.Default.Tests | |
cd $projectName.Managers.Default.Tests | |
dotnet add reference ../$projectName.Managers.Default | |
dotnet add reference ../$projectName.DomainModels | |
dotnet add reference ../$projectName.Mapper | |
dotnet add reference ../$projectName.Infrastructure | |
dotnet add reference ../$projectName.Engines | |
dotnet add reference ../$projectName.Utilities | |
dotnet add package Shouldly | |
dotnet add package Moq | |
cd .. | |
else | |
echo -e "${BRed}Unable to create $projectName.Managers.Default.Tests project${NC}" | |
exit | |
fi | |
echo | |
echo -e "${BGreen}Manager projects created successfully${NC}" | |
echo | |
################################################################################ | |
# Create Composition Root project | |
################################################################################ | |
dotnet new classlib --name $projectName.Api.Compose | |
if test -d $projectName.Api.Compose; then | |
dotnet sln add $projectName.Api.Compose | |
cd $projectName.Api.Compose | |
dotnet add reference ../$projectName.Engines.Default | |
dotnet add reference ../$projectName.Infrastructure.Default | |
dotnet add reference ../$projectName.Managers.Default | |
cd .. | |
else | |
echo -e "${BRed}Unable to create $projectName.Api.Compose project${NC}" | |
exit | |
fi | |
echo | |
echo -e "${BGreen}API composition project created successfully${NC}" | |
echo | |
################################################################################ | |
# Create Api project | |
################################################################################ | |
dotnet new webapi --name $projectName.Api --use-controllers --use-program-main | |
if test -d $projectName.Api; then | |
dotnet sln add $projectName.Api | |
cd $projectName.Api | |
dotnet add reference ../$projectName.Api.Compose | |
dotnet add reference ../$projectName.DomainModels | |
dotnet add reference ../$projectName.Managers | |
dotnet add reference ../$projectName.Utilities | |
dotnet add package Swashbuckle.AspNetCore.Swagger | |
cd .. | |
else | |
echo -e "${BRed}Unable to create $projectName.Api project${NC}" | |
exit | |
fi | |
echo | |
echo -e "${BGreen}API project created successfully${NC}" | |
echo | |
################################################################################ | |
# Install tool manifest | |
################################################################################ | |
echo | |
echo -e "${BYellow}Installing tools${NC}" | |
echo | |
cd $projectName.Api | |
dotnet new tool-manifest | |
if test -d ".config"; then | |
cd .config | |
dotnet tool install swashbuckle.aspnetcore.cli | |
else | |
echo -e "${BRed}Unable to create tool manifest${NC}" | |
exit | |
fi | |
cd .. | |
echo | |
echo -e "${BGreen}Tools installation completed successfully${NC}" | |
echo | |
################################################################################ | |
# Build project | |
################################################################################ | |
echo | |
echo -e "${BGreen}Building solution${NC}" | |
echo | |
dotnet build |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment