Skip to content

Commit bc67e6e

Browse files
authored
Merge branch 'fullstack-hy2020:source' into patch-4
2 parents 50c0bf3 + f43704c commit bc67e6e

File tree

5 files changed

+67
-67
lines changed

5 files changed

+67
-67
lines changed

src/content/0/es/part0a.md

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ lang: es
99

1010
Este curso es una introducción al desarrollo web moderno con JavaScript. El enfoque principal está en las aplicaciones de una sola página implementadas con React y su soporte con servicios web RESTful y GraphQL implementados con Node.js. El curso también tiene partes sobre TypeScript, React Native e Integración continua.
1111

12-
Otros temas incluyen depuración de aplicaciones, tecnología de contenedores, configuración, administración de entornos de ejecución y bases de datos.
12+
Otros temas incluyen depuración de aplicaciones, tecnologías de contenedores, configuración, administración de entornos de ejecución y bases de datos.
1313

1414
El curso es totalmente libre de cargo. Puedes obtener un certificado e incluso los créditos ECTS (Sistema Europeo de Transferencia y Acumulación de Créditos) de la Universidad de Helsinki gratuitamente.
1515

@@ -19,7 +19,7 @@ Se espera que los participantes tengan buenas habilidades de programación, cono
1919

2020
No se requieren conocimientos previos de JavaScript u otros temas del curso.
2121

22-
¿Cuanta experiencia en programación es necesaria? Es difícil de decir, pero deberías ser bastante fluido en *tu* lenguaje. Este nivel de fluidez usualmente necesita de al menos 100-200 horas de practica para desarrollarlo.
22+
¿Cuánta experiencia en programación es necesaria? Es difícil de decir, pero deberías ser bastante fluido en *tu* lenguaje. Este nivel de fluidez usualmente necesita de al menos 100-200 horas de práctica para desarrollarlo.
2323

2424
### Material del curso
2525

@@ -45,11 +45,11 @@ Las estadísticas del tiempo de finalización de los ejercicios se pueden encont
4545

4646
### Canal de Discord para el curso
4747

48-
Puedes hablar sobre el curso y temas relacionados en nuestro grupo dedicado en Discord https://study.cs.helsinki.fi/discord/join/fullstack. Discord tiene canales fullstack_general y especifico para cada parte (nombres de canal con prefijo fullstack) para discusiones relacionadas con el curso. Ten en cuenta que *el canal "chat" de Discord no es adecuado para la discusión relacionada con el curso*. ¡Únete a la conversación!
48+
Puedes hablar sobre el curso y temas relacionados en nuestro grupo dedicado en Discord https://study.cs.helsinki.fi/discord/join/fullstack. Discord tiene canales fullstack_general y especificos para cada parte (nombres de canal con prefijo fullstack) para discusiones relacionadas con el curso. Ten en cuenta que *el canal "chat" de Discord no es adecuado para la discusión relacionada con el curso*. ¡Únete a la conversación!
4949

5050
### Como obtener ayuda en Discord
5151

52-
Cuando pides ayuda relacionada a un problema en el grupo de Discord tu pregunta debe ser tan informativa y precisa como sea posible. Si tu pregunta se ve asi
52+
Cuando pidas ayuda relacionada a un problema en el grupo de Discord tu pregunta debe ser tan informativa y precisa como sea posible. Si tu pregunta se ve asi
5353

5454
> *Agregar una nueva persona no funciona, ¿podrías ayudarme con esto?*
5555
@@ -114,17 +114,17 @@ Al enviar al menos 127 ejercicios de las partes 0 a 7 mientras trabajas en el cu
114114
- [Inscríbete en la parte 6 a través de la Open University](https://www.avoin.helsinki.fi/palvelut/esittely.aspx?s=otm-1d62f0e7-565b-4660-9c5a-7e7e449e352e).
115115
- [Solicita los créditos para la parte 6](/es/part0/informacion_general#como-obtener-tus-creditos).
116116
117-
#### Part 7 - Desarrollo Web Full Stack, extension 2 (1 crédito, CSM141083)
117+
#### Parte 7 - Desarrollo Web Full Stack, extension 2 (1 crédito, CSM141083)
118118
119119
Al enviar al menos 138 ejercicios para las partes 0-7 mientras trabajas en el curso base, puedes recibir un crédito adicional a través de esta extensión.
120120
121121
- Envía al menos 138 ejercicios para las partes 0-7.
122122
- [Inscríbete en la parte 7 a través de la Open University](https://www.avoin.helsinki.fi/palvelut/esittely.aspx?s=otm-abc0a702-3d35-496f-87b9-5c7845a9367b).
123123
- [Solicita los créditos para la parte 7](/es/part0/informacion_general#como-obtener-tus-creditos).
124124
125-
#### Part 8 - Desarrollo Web Full Stack: GraphQL (1 crédito, CSM14113)
125+
#### Parte 8 - Desarrollo Web Full Stack: GraphQL (1 crédito, CSM14113)
126126
127-
Al enviar al menos 22 de 26 ejercicios para la parte 8 del curso de, GraphQL, puedes obtener un crédito adicional. La parte 8 puede realizarse en cualquier momento después de la parte 5, porque su contenido es independiente de las partes 6 y 7.
127+
Al enviar al menos 22 de 26 ejercicios para la parte 8 del curso de GraphQL, puedes obtener un crédito adicional. La parte 8 puede realizarse en cualquier momento después de la parte 5, porque su contenido es independiente de las partes 6 y 7.
128128
129129
- Envía al menos 22 de 26 ejercicios para la parte 8.
130130
- [Inscríbete en la parte 8 a través de la Open University](https://www.avoin.helsinki.fi/palvelut/esittely.aspx?s=otm-4b912f04-d928-4a2d-aed7-8d8b2cefd397).
@@ -138,31 +138,31 @@ Al enviar al menos 24 de 30 ejercicios de la parte 9 del curso, TypeScript, pued
138138
- [Inscríbete en la parte 9 a través de la Open University](https://www.avoin.helsinki.fi/palvelut/esittely.aspx?s=otm-8d68ba22-4d46-479c-8990-32ddc83f5a5f).
139139
- [Solicita los créditos para la parte 9](/es/part0/informacion_general#como-obtener-tus-creditos).
140140
141-
#### Part 10 - Desarrollo Web Full Stack: React Native (2 crédito, CSM14111)
141+
#### Parte 10 - Desarrollo Web Full Stack: React Native (2 crédito, CSM14111)
142142
143143
Al enviar 25 ejercicios para la parte 10 del curso, React Native, puedes obtener dos créditos adicionales. Puedes encontrar más información sobre los requisitos previos de esta parte, el envío de ejercicios y los créditos en la [parte 10](/es/part10/introduccion_a_react_native).
144144
145145
- Envía al menos 25 ejercicios para la parte 10.
146146
- [Inscríbete en la parte 10 a través de la Open University](https://www.avoin.helsinki.fi/palvelut/esittely.aspx?s=otm-e859336d-9d63-47ac-9906-a7da74cae32d).
147147
- [Solicita los créditos para la parte 10](/es/part0/informacion_general#como-obtener-tus-creditos).
148148
149-
#### Part 11 - Desarrollo Web Full Stack: Integración Continua / Entrega Continua (1 crédito, CSM14112)
149+
#### Parte 11 - Desarrollo Web Full Stack: Integración Continua / Entrega Continua (1 crédito, CSM14112)
150150
151151
Al enviar todos los ejercicios para la parte 11 del curso, CI/CD (Integración Continua/Entrega Continua), puedes obtener un crédito adicional. Más información sobre los requisitos previos de esta parte y el envío de ejercicios en la [parte 11](/en/part11).
152152
153153
- Envía todos los ejercicios para la parte 11.
154154
- [Inscríbete en la parte 11 a través de la Open University](https://www.avoin.helsinki.fi/palvelut/esittely.aspx?s=otm-33f0ce21-ff95-42e1-9581-2c75ea3dd2a5).
155155
- [Solicita los créditos para la parte 11](/es/part0/informacion_general#como-obtener-tus-creditos).
156156
157-
#### Part 12 - Desarrollo Web Full Stack: Contenedores (1 crédito, CSM141084)
157+
#### Parte 12 - Desarrollo Web Full Stack: Contenedores (1 crédito, CSM141084)
158158
159159
Al enviar todos los ejercicios para la parte 12 del curso, tecnología de contenedores, puedes obtener un crédito adicional. Más información sobre los requisitos previos de esta parte y el envío de ejercicios en la [parte 12](/es/part12).
160160
161161
- Envía todos los ejercicios para la parte 12.
162162
- [Inscríbete en la parte 12 a través de la Open University](https://www.avoin.helsinki.fi/palvelut/esittely.aspx?s=otm-fd32902f-3941-4963-b73b-8408cff02ae2).
163163
- [Solicita los créditos para la parte 12](/es/part0/informacion_general#como-obtener-tus-creditos).
164164
165-
#### Part 13 - Desarrollo Web Full Stack: Bases de datos relacionales (1 crédito, CSM14114)
165+
#### Parte 13 - Desarrollo Web Full Stack: Bases de datos relacionales (1 crédito, CSM14114)
166166
167167
Al enviar todos los ejercicios para la parte 13 del curso, bases de datos relacionales, puedes obtener un crédito adicional. Más información sobre los requisitos previos de esta parte y el envío de ejercicios en la [parte 13](/es/part13).
168168
@@ -186,7 +186,7 @@ Ten en cuenta que si completas el "curso base" con 6 o 7 créditos, necesitas in
186186
187187
Cómo estudiar el curso: instrucciones resumidas para otras partes del curso
188188
189-
- Realiza los ejercicios. Los ejercicios se envían a través de GitHub y se califican en el sistema de envío de ejercicios. Ten en cuenta que las partes 8-13 tienen una instancia separada en el sistema de envío de ejercicios.
189+
- Realiza los ejercicios. Los ejercicios se envían a través de GitHub y se califican en el sistema de envío de ejercicios. Ten en cuenta que las es 8-13 tienen una instancia separada en el sistema de envío de ejercicios.
190190
- El [certificado del curso](/es/part0/informacion_general#certificado-del-curso) estará disponible en el sistema de envío de ejercicios.
191191
- Si deseas obtener créditos de la Universidad de Helsinki
192192
- Inscríbete en el curso. Puedes inscribirte en cada parte a través del enlace en el material del curso ([Partes y finalización](/es/part0/informacion_general#partes-y-finalizacion)). Inscríbete en cada parte por separado.
@@ -282,7 +282,7 @@ Cuando se complete el registro, aparecerá el siguiente texto en el sistema de e
282282
283283
### ¿Dónde obtengo mi número de estudiante de la Universidad de Helsinki?
284284
285-
Cuando y si te inscribes en un curso por primera vez a través de Open University, se generará automáticamente un número de estudiante de la Universidad de Helsinki. ***Asegúrate de haberte inscrito en el curso antes de intentar averiguar cuál es tu número de estudiante.***
285+
Cuando te inscribas en un curso por primera vez a través de Open University, se generará automáticamente un número de estudiante de la Universidad de Helsinki. ***Asegúrate de haberte inscrito en el curso antes de intentar averiguar cuál es tu número de estudiante.***
286286
287287
Ten en cuenta también que **no necesitas inscribirte** en la Open University para obtener el certificado del curso.
288288
@@ -334,7 +334,7 @@ La transcripción te será entregada electrónicamente por correo electrónico.
334334
335335
### No hay más versiones anuales
336336
337-
No hay más "versiones anuales" del curso, el curso está abierto todo el tiempo. Cada parte se actualiza una o dos veces al año. Las actualizaciones son en su mayoría menores: se actualizan las versiones de las librerías y se mejora la claridad del texto. Sin embargo, también puede haber algunos cambios más significativos.
337+
No hay más "versiones anuales" del curso, el curso está disponible todo el tiempo. Cada parte se actualiza una o dos veces al año. Las actualizaciones son en su mayoría menores: se actualizan las versiones de las librerías y se mejora la claridad del texto. Sin embargo, también puede haber algunos cambios más significativos.
338338
339339
A pesar de los cambios *todos los ejercicios enviados siguen siendo válidos*, y puedes continuar el curso sin preocuparte por las actualizaciones. Además, la política para obtener certificados, créditos universitarios, etc., seguirá siendo la misma, sin importar lo que suceda.
340340

src/content/2/fr/part2c.md

Lines changed: 38 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -143,41 +143,31 @@ De nos jours, pratiquement tous les projets JavaScript sont définis à l'aide d
143143

144144
```json
145145
{
146-
"name": "notes",
147-
"version": "0.1.0",
146+
"name": "part2-notes-frontend",
148147
"private": true,
149-
"dependencies": {
150-
"@testing-library/jest-dom": "^5.16.1",
151-
"@testing-library/react": "^12.1.2",
152-
"@testing-library/user-event": "^13.5.0",
153-
"react": "^17.0.2",
154-
"react-dom": "^17.0.2",
155-
"react-scripts": "5.0.0",
156-
"web-vitals": "^2.1.3"
157-
},
148+
"version": "0.0.0",
149+
"type": "module",
158150
"scripts": {
159-
"start": "react-scripts start",
160-
"build": "react-scripts build",
161-
"test": "react-scripts test",
162-
"eject": "react-scripts eject"
151+
"dev": "vite",
152+
"build": "vite build",
153+
"lint": "eslint .",
154+
"preview": "vite preview"
163155
},
164-
"eslintConfig": {
165-
"extends": [
166-
"react-app",
167-
"react-app/jest"
168-
]
156+
"dependencies": {
157+
"react": "^18.3.1",
158+
"react-dom": "^18.3.1"
169159
},
170-
"browserslist": {
171-
"production": [
172-
">0.2%",
173-
"not dead",
174-
"not op_mini all"
175-
],
176-
"development": [
177-
"last 1 chrome version",
178-
"last 1 firefox version",
179-
"last 1 safari version"
180-
]
160+
"devDependencies": {
161+
"@eslint/js": "^9.17.0",
162+
"@types/react": "^18.3.18",
163+
"@types/react-dom": "^18.3.5",
164+
"@vitejs/plugin-react": "^4.3.4",
165+
"eslint": "^9.17.0",
166+
"eslint-plugin-react": "^7.37.2",
167+
"eslint-plugin-react-hooks": "^5.0.0",
168+
"eslint-plugin-react-refresh": "^0.4.16",
169+
"globals": "^15.14.0",
170+
"vite": "^6.0.5"
181171
}
182172
}
183173
```
@@ -197,18 +187,20 @@ Axios est désormais inclus parmi les autres dépendances :
197187

198188
```json
199189
{
200-
"name": "notes",
201-
"version": "0.1.0",
190+
"name": "part2-notes-frontend",
202191
"private": true,
192+
"version": "0.0.0",
193+
"type": "module",
194+
"scripts": {
195+
"dev": "vite",
196+
"build": "vite build",
197+
"lint": "eslint .",
198+
"preview": "vite preview"
199+
},
203200
"dependencies": {
204-
"@testing-library/jest-dom": "^5.16.1",
205-
"@testing-library/react": "^12.1.2",
206-
"@testing-library/user-event": "^13.5.0",
207-
"axios": "^0.24.0", // highlight-line
208-
"react": "^17.0.2",
209-
"react-dom": "^17.0.2",
210-
"react-scripts": "5.0.0",
211-
"web-vitals": "^2.1.3"
201+
"axios": "^1.7.9", // highlight-line
202+
"react": "^18.3.1",
203+
"react-dom": "^18.3.1"
212204
},
213205
// ...
214206
}
@@ -228,11 +220,11 @@ et faire un petit ajout à la partie <i>scripts</i> du fichier <i>package.json</
228220
{
229221
// ...
230222
"scripts": {
231-
"start": "react-scripts start",
232-
"build": "react-scripts build",
233-
"test": "react-scripts test",
234-
"eject": "react-scripts eject",
235-
"server": "json-server -p3001 --watch db.json" // highlight-line
223+
"dev": "vite",
224+
"build": "vite build",
225+
"lint": "eslint .",
226+
"preview": "vite preview",
227+
"server": "json-server -p 3001 db.json" // highlight-line
236228
},
237229
}
238230
```

src/content/4/en/part4c.md

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -431,6 +431,8 @@ The code for creating a new note has to be updated so that the note is assigned
431431
Let's expand our current implementation in <i>controllers/notes.js</i> so that the information about the user who created a note is sent in the <i>userId</i> field of the request body:
432432

433433
```js
434+
const notesRouter = require('express').Router()
435+
const Note = require('../models/note')
434436
const User = require('../models/user') //highlight-line
435437

436438
//...
@@ -442,16 +444,18 @@ notesRouter.post('/', async (request, response) => {
442444

443445
const note = new Note({
444446
content: body.content,
445-
important: body.important === undefined ? false : body.important,
446-
user: user.id //highlight-line
447+
important: body.important || false,
448+
user: user._id //highlight-line
447449
})
448450

449451
const savedNote = await note.save()
450452
user.notes = user.notes.concat(savedNote._id) //highlight-line
451453
await user.save() //highlight-line
452-
454+
453455
response.status(201).json(savedNote)
454456
})
457+
458+
// ...
455459
```
456460

457461
It's worth noting that the <i>user</i> object also changes. The <i>id</i> of the note is stored in the <i>notes</i> field of the <i>user</i> object:

src/content/4/fi/osa4c.md

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -422,7 +422,9 @@ Muistiinpanot luovaa koodia on nyt mukautettava siten, että uusi muistiinpano t
422422
Laajennetaan ensin olemassaolevaa toteutusta siten, että tieto muistiinpanon luovan käyttäjän id:stä lähetetään pyynnön rungossa kentän <i>userId</i> arvona:
423423

424424
```js
425-
const User = require('../models/user')
425+
const notesRouter = require('express').Router()
426+
const Note = require('../models/note')
427+
const User = require('../models/user') //highlight-line
426428

427429
//...
428430

@@ -433,16 +435,18 @@ notesRouter.post('/', async (request, response) => {
433435

434436
const note = new Note({
435437
content: body.content,
436-
important: body.important === undefined ? false : body.important,
438+
important: body.important || false,
437439
user: user._id //highlight-line
438440
})
439441

440442
const savedNote = await note.save()
441443
user.notes = user.notes.concat(savedNote._id) //highlight-line
442444
await user.save() //highlight-line
443445

444-
response.json(savedNote)
446+
response.status(201).json(savedNote)
445447
})
448+
449+
// ...
446450
```
447451

448452
Huomionarvoista on nyt se, että myös <i>user</i>-olio muuttuu. Sen kenttään <i>notes</i> talletetaan luodun muistiinpanon <i>id</i>:

src/content/8/en/part8e.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -538,7 +538,7 @@ When queries and mutations are used, GraphQL uses the HTTP protocol in the commu
538538
The above code registers a WebSocketServer object to listen to WebSocket connections, besides the usual HTTP connections that the server listens to. The second part of the definition registers a function that closes the WebSocket connection on server shutdown.
539539
If you're interested in more details about configurations, Apollo's [documentation](https://www.apollographql.com/docs/apollo-server/data/subscriptions) explains in relative detail what each line of code does.
540540

541-
WebSockets are a perfect match for communication in the case of GraphQL subscriptions since when WebSockets are used, also the server can initiate the communication.
541+
WebSockets are a perfect match for communication in the case of GraphQL subscriptions, since when WebSockets are used, the server can also initiate communication.
542542

543543
The subscription *personAdded* needs a resolver. The *addPerson* resolver also has to be modified so that it sends a notification to subscribers.
544544

0 commit comments

Comments
 (0)