-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcreate-net-project-clean.sh
More file actions
executable file
·184 lines (160 loc) · 6.51 KB
/
Copy pathcreate-net-project-clean.sh
File metadata and controls
executable file
·184 lines (160 loc) · 6.51 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
#!/bin/zsh
# Funções para formatação de nomes
format_short_company_name() {
echo "$1" | tr -d ' ' | tr '[:upper:]' '[:lower:]'
}
format_full_company_name() {
echo "$1" | awk '{ for(i=1;i<=NF;i++) $i=toupper(substr($i,1,1)) tolower(substr($i,2)); } 1' | tr -d ' '
}
format_api_name_root() {
echo "$1" | tr -d ' ' | tr '[:upper:]' '[:lower:]'
}
format_api_name() {
echo "$1" | awk '{ for(i=1;i<=NF;i++) $i=toupper(substr($i,1,1)) tolower(substr($i,2)); } 1' | tr -d ' '
}
# Perguntar se é um projeto para teste
read "is_test_project?É um projeto para teste? (y/n): "
if [[ "$is_test_project" == "y" ]]; then
project_directory="/Users/willianrattis/Development/Tests"
else
read "project_directory?Digite o caminho do diretório do projeto: "
fi
# Coletar outras informações
read "short_company_name?Digite o nome curto da empresa: "
read "full_company_name?Digite o nome completo da empresa: "
read "api_name?Digite o nome da API: "
# Formatar os nomes
project_directory=$(echo "$project_directory" | tr -d ' ')
short_company_name=$(format_short_company_name "$short_company_name")
full_company_name=$(format_full_company_name "$full_company_name")
api_name_root=$(format_api_name_root "$api_name")
api_name=$(format_api_name "$api_name")
# Mudar para o diretório do projeto e criar a estrutura base
cd "$project_directory"
mkdir "$short_company_name-backend-$api_name_root" && cd "$short_company_name-backend-$api_name_root"
git init && git branch -M main && dotnet new gitignore
dotnet new globaljson --sdk-version 6.0.408
# Criação da pasta .vscode e arquivos de configuração
mkdir .vscode && cd .vscode
# Gerar launch.json
echo "{
\"version\": \"0.2.0\",
\"configurations\": [
{
\"name\": \".NET Core Launch (web)\",
\"type\": \"coreclr\",
\"request\": \"launch\",
\"preLaunchTask\": \"build\",
\"program\": \"\${workspaceFolder}/src/$full_company_name.$api_name.Api/bin/Debug/net6.0/$full_company_name.$api_name.Api.dll\",
\"args\": [],
\"cwd\": \"\${workspaceFolder}/src/$full_company_name.$api_name.Api\",
\"stopAtEntry\": false,
\"serverReadyAction\": {
\"action\": \"openExternally\",
\"pattern\": \"\\\\bNow listening on:\\\\s+(https?://\\\\S+)\"
},
\"env\": {
\"ASPNETCORE_ENVIRONMENT\": \"Development\"
},
\"sourceFileMap\": {
\"/Views\": \"\${workspaceFolder}/Views\"
}
},
{
\"name\": \".NET Core Attach\",
\"type\": \"coreclr\",
\"request\": \"attach\"
}
]
}" > launch.json
# Gerar tasks.json
echo "{
\"version\": \"2.0.0\",
\"tasks\": [
{
\"label\": \"build\",
\"command\": \"dotnet\",
\"type\": \"process\",
\"args\": [
\"build\",
\"\${workspaceFolder}/$full_company_name.$api_name.sln\",
\"/property:GenerateFullPaths=true\",
\"/consoleloggerparameters:NoSummary\"
],
\"problemMatcher\": \"\$msCompile\"
},
{
\"label\": \"publish\",
\"command\": \"dotnet\",
\"type\": \"process\",
\"args\": [
\"publish\",
\"\${workspaceFolder}/$full_company_name.$api_name.sln\",
\"/property:GenerateFullPaths=true\",
\"/consoleloggerparameters:NoSummary\"
],
\"problemMatcher\": \"\$msCompile\"
},
{
\"label\": \"watch\",
\"command\": \"dotnet\",
\"type\": \"process\",
\"args\": [
\"watch\",
\"run\",
\"--project\",
\"\${workspaceFolder}/$full_company_name.$api_name.sln\"
],
\"problemMatcher\": \"\$msCompile\"
}
]
}" > tasks.json
cd ..
# Continuação da criação da estrutura do projeto
mkdir src && cd src
dotnet new webapi -o "$full_company_name.$api_name.Api"
dotnet new classlib -o "$full_company_name.$api_name.Domain"
dotnet new classlib -o "$full_company_name.$api_name.Infrastructure"
dotnet new classlib -o "$full_company_name.$api_name.Application"
# Adicionar pacote ao projeto Api
cd "$full_company_name.$api_name.Api" && dotnet add package AutoMapper.Extensions.Microsoft.DependencyInjection --source https://api.nuget.org/v3/index.json
# Criar pastas adicionais dentro da API
mkdir Configuration Extensions Helpers Mappings Requests Responses Services
# Voltar para a pasta src
cd ..
# Adicionar referências conforme as dependências
# Application depende de Domain
cd "$full_company_name.$api_name.Application" && dotnet add reference "../$full_company_name.$api_name.Domain/"
cd ..
# Infrastructure (Persistence) depende de Application
cd "$full_company_name.$api_name.Infrastructure" && dotnet add reference "../$full_company_name.$api_name.Application/"
cd ..
# WebAPI depende de Application e Infrastructure (Persistence)
cd "$full_company_name.$api_name.Api" && dotnet add reference "../$full_company_name.$api_name.Application/"
dotnet add reference "../$full_company_name.$api_name.Infrastructure/"
cd ../..
# Criação dos projetos de teste e adição de referências
mkdir tests && cd tests
dotnet new xunit -o "$full_company_name.$api_name.Api.UnitTests"
dotnet new xunit -o "$full_company_name.$api_name.Api.IntegrationTests"
cd "$full_company_name.$api_name.Api.IntegrationTests" && dotnet add reference "../../src/$full_company_name.$api_name.Api/" && dotnet add package WireMock.Net --source https://api.nuget.org/v3/index.json
cd ..
cd "$full_company_name.$api_name.Api.UnitTests" && dotnet add reference "../../src/$full_company_name.$api_name.Api/"
cd ../..
# Criar e atualizar a solução
dotnet new sln -n "$full_company_name.$api_name"
dotnet sln add "src/$full_company_name.$api_name.Api"
dotnet sln add "src/$full_company_name.$api_name.Domain"
dotnet sln add "src/$full_company_name.$api_name.Infrastructure"
dotnet sln add "src/$full_company_name.$api_name.Application"
dotnet sln add "tests/$full_company_name.$api_name.Api.IntegrationTests"
dotnet sln add "tests/$full_company_name.$api_name.Api.UnitTests"
echo "Listing projects in the solution..."
dotnet sln list
echo "Restore(s) and Build(s)"
echo "----------"
dotnet restore &&
dotnet build
# Abrir o projeto no Visual Studio Code
code "$project_directory/$short_company_name-backend-$api_name_root"
echo "Projeto criado com sucesso!"