Skip to content

Instantly share code, notes, and snippets.

@scottoffen
Created January 22, 2024 21:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save scottoffen/3e44dafcc43dcc0136eca7e7b77b1582 to your computer and use it in GitHub Desktop.
Save scottoffen/3e44dafcc43dcc0136eca7e7b77b1582 to your computer and use it in GitHub Desktop.
Generate a WebApi project structure
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