-
Notifications
You must be signed in to change notification settings - Fork 1
/
tingeso-1.ps1
221 lines (185 loc) · 8.08 KB
/
tingeso-1.ps1
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
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
[string]$javaVersion = "17"
[int]$step = 1
[int]$totalSteps = 6
# Función para mostrar el progreso
function Update-Step {
Write-Host
Write-Host "Creando proyectos: [$step de $totalSteps]" -ForegroundColor Cyan
Write-Host
return 1 + $step
}
# Función para verificar la instalación de una herramienta
function Get-Program {
param (
[string]$command,
[string]$installScript
)
if (-not (Get-Command $command -ErrorAction SilentlyContinue)) {
Write-Host "$command no está instalado. Instalando..."
Invoke-Expression $installScript
}
else {
Write-Host "$command ya está instalado."
}
}
# Función para mostrar el menú y seleccionar opción por número
function Show-Menu {
param (
[string[]]$options
)
Write-Host
# Mostrar las opciones del menú
for ($i = 0; $i -lt $options.Length; $i++) {
Write-Host " $($i + 1). $($options[$i])"
}
Write-Host
# Leer la selección del usuario
$selection = Read-Host "Seleccione una opción por número"
# Validar si la selección está en el rango válido
if ($selection -match '^\d+$' -and [int]$selection -ge 1 -and [int]$selection -le $options.Length) {
return $options[[int]$selection - 1]
}
else {
Write-Host "Selección inválida. Por favor, elija un número entre 1 y $($options.Length)."
return Show-Menu -options $options
}
}
# Función de pregunta de si o no
function Show-Question {
param (
[string]$prompt,
[string]$yes,
[string]$no
)
$option = Read-Host -Prompt $prompt
Write-Host
if ($option -eq "s") {
Invoke-Expression $yes
}
elseif ($option -eq "n") {
Invoke-Expression $no
}
else {
Show-Question $prompt $yes $no
}
}
Write-Host "
+++++++
+++++++++++++
+++++++++++++++++++++
+++++++++++++++++++++++++++++
++++++++++++ +++ ++++++++++++
+++++++++++ ++ +++ ++ +++++++++++
+++++++++ +++ +++ +++++++++
++++++++ +++++++++ ++++++++
++++++ +++++++++++++++++++ +++++
+++++ ++++ +++++ +++++ ++++
+++++++ ++++++ +++++++++ +++++++ ++++++
+++++++++ +++++++++ +++++ +++++++++ ++++++++
+++++++++++ +++++++++ +++ +++++++++ +++++++++++
++++++++ ++ +++++++++ +++++++++ ++ ++++++++
+++++++ ++++ ++++++ +++++++ ++++ +++++++
+++++++ +++++++++++++++++++++++++ +++++++
+++++++ +++++++++++++++++++++++ +++++++
++++++ +++++++++++++++++++++ ++++++
++++++ ++++++++++++++++ ++++++
++++++++++++ ++++++++++++
+++++++++++++++++++++++++++++
OSUSACH
" -ForegroundColor DarkYellow
$step = Update-Step
$projectName = Read-Host -Prompt "> Ingresa el nombre del proyecto: "
mkdir $projectName
Set-Location -Path "./$projectName"
$frontendProjectName = "$projectName-frontend"
$backendProjectName = "$projectName-backend"
$step = Update-Step
# Verificar e instalar Node.js si es necesario
Get-Program -command "node" -installScript "winget install OpenJS.NodeJS"
# Verificar e instalar create-vite si es necesario
Get-Program -command "create-vite" -installScript "npm install -g create-vite"
# Crear el proyecto frontend con Vite y Vue.js
Write-Host "Creando el proyecto frontend con Vite y React..."
npx create-vite $frontendProjectName --template react
$step = Update-Step
# Navegar al directorio del proyecto frontend y instalar dependencias
Set-Location -Path $frontendProjectName
Write-Host "Instalando dependencias del frontend..."
npm install
# Agregar axios para solicitudes http al backend
Write-Host
Write-Host "Instalando axios para que podái conectarte a tu backend..." -ForegroundColor Red
npm install axios
Write-Host
Write-Host "Selecciona un framework de CSS" -ForegroundColor DarkYellow
# Mostrar el menú para opciones adicionales
$options = @("Agregar Tailwind CSS", "Agregar Bootstrap", "No agregar nada")
$selection = Show-Menu -options $options
switch ($selection) {
"Agregar Tailwind CSS" {
Write-Host "Agregando Tailwind CSS al proyecto frontend..."
npm install -D tailwindcss postcss autoprefixer
npx tailwindcss init -p
# Configurar Tailwind CSS
$tailwindConfig = "@tailwind base;\n@tailwind components;\n@tailwind utilities;"
$tailwindConfig | Set-Content -Path "./src/assets/tailwind.css"
(Get-Content -Path "./src/main.js") -replace "import './style.css';", "import './assets/tailwind.css';" | Set-Content -Path "./src/main.js"
Write-Host "Tailwind CSS agregado correctamente."
}
"Agregar Bootstrap" {
Write-Host "Agregando Bootstrap al proyecto frontend..."
npm install bootstrap
(Get-Content -Path "./src/main.js") + "`nimport 'bootstrap/dist/css/bootstrap.min.css';" | Set-Content -Path "./src/main.js"
Write-Host "Bootstrap agregado correctamente."
}
"No agregar nada" {
Write-Host "No se ha agregado ningún framework de CSS adicional."
}
}
$step = Update-Step
# Regresar al directorio raíz
Set-Location -Path ..
Write-Host "Se instalará el proyecto con Java 17 " -NoNewline
Write-Host -ForegroundColor Red "<para fingeso no necesitái nada de la 21-22, para tbd implementando encriptación y jwt 21 y 22 tiran error>"
Write-Host
# Verificar e instalar JDK y Maven si es necesario
Get-Program -command "java" -installScript "winget install Oracle.OpenJDK.$javaVersion"
Write-Host
# Crear el proyecto backend con Spring Boot usando Spring Initializr
Write-Host "Creando el proyecto backend con Spring Boot..."
Write-Host
$groupIdUser = Read-Host -Prompt "> Ingresa un groupID: "
$groupId = "osusach.$groupIdUser" # spam
Write-Host
Write-Host "Elige el tipo de proyecto" -ForegroundColor DarkYellow
$options = @("maven-project", "gradle-project", "gradle-project-kotlin")
$projectType = Show-Menu -options $options
Write-Host
Write-Host "Qué base de datos vas a usar"
$options = @("PostgreSQL", "MySQL")
$database = Show-Menu -options $options
$databaseDriver = "%2C"
switch ($database) {
"PostgreSQL" {
Show-Question -prompt "> Quieres instalar PostgreSQL? (s/n)" -yes "winget install PostgreSQL.PostgreSQL.14 -e" -no "Write-Host 'Omitiendo postgres'"
$databaseDriver = $databaseDriver + "postgresql"
}
"MySQL" {
Show-Question -prompt "> Quieres instalar MySQL? (s/n)" -yes "winget install Oracle.MySQL -e" -no "Write-Host 'Omitiendo mysql'"
$databaseDriver = $databaseDriver + "mysql"
}
}
$packageName = "$groupId.$projectName"
$backendDir = "./$backendProjectName"
Invoke-WebRequest -Uri "https://start.spring.io/starter.zip?type=$projectType&language=java&bootVersion=3.3.2&baseDir=$backendProjectName&groupId=$groupId&artifactId=$projectName&name=$projectName&description=Backend+project+for+Spring+Boot&packageName=$packageName&packaging=jar&javaVersion=$javaVersion&dependencies=data-jpa%2Cweb%2Clombok$databaseDriver" -OutFile "backend.zip"
# Descomprimir el archivo
Expand-Archive -Path backend.zip -DestinationPath $backendDir
Remove-Item backend.zip
Move-Item -Path "$backendProjectName/$backendProjectName/*" -Destination "$backendProjectName" -Force
Remove-Item "$backendProjectName/$backendProjectName"
$step = Update-Step
Show-Question -prompt "> Quieres instalar pgAdmin? (s/n)" -yes "winget install PostgreSQL.pgAdmin -e" -no "Write-Host 'Omitiendo pgAdmin'"
$step = Update-Step
Write-Host "Proyectos frontend y backend creados con éxito."
Write-Host "Para iniciar el proyecto frontend, navega a './$frontendProjectName' y ejecuta 'npm run dev'."
Write-Host "Para iniciar el proyecto backend, navega a './$backendProjectName' y ejecuta 'mvn spring-boot:run'."