El repositorio tiene la siguiente estructura de carpetas:
.
└── crosswords/
├── back/
│ ├── crosswords/
│ │ └── ...
│ └── src/
│ └── ...
├── docs
├── front
├── 0_palabras_todas.txt
├── compose.yml
├── dump-ndjson.py
├── README.md
├── spanish-words.txt
└── xwords.jsonback: API de la aplicación hecha con Express que utiliza MongoDB y Elasticsearchback/crosswords: Contiene las plantillas de los crucigramas, las soluciones y las pistasfront: Aplicación hecha en React para jugar al crucigramadocs: Documentación del proyecto del crucigramadump-ndjson: Script que convierte el archivo0_palabras_todas.txtal formatondjsonxwords.json: Documentos para importar en MongoDB
Para arrancar el proyecto tiene que instalar estos compoenetes:
Antes de iniciar el backend o el front ejecuta en la raiz del repositorio:
Linux y Windows
docker compose up -d
docker compose down -v # Para quitar los contenedoresUna vez iniciado los contenedores:
- Importa los crucigramas del archivo
xwords.jsona la instancia de MongoDB:
docker exec crossword-mongo-1 mongoimport --db=xword --collection=crosswords --file=/data/xwords.json- Puebla
elasticsearchcon las palabras del diccionario del archivospanish-words.txt(Tarda aproximadamente 1 minuto):
# En la raiz del repositorio
curl localhost:9200/_bulk/?pretty -X POST -H "Content-Type: application/x-ndjson" --data-binary @spanish-words.txtPara ejecutar el servidor de Express tiene que ejecutar dentro de la carpeta back lo siguiente:
cd back # Si ya está en la carpeta back no hace falta ejecutar este comando
npm install # Descarga las dependencias del proyecto
npm run build # Transpila el código typescript y lo convierte a javascript, crea una carpeta dist
node dist/index.jsPara ejecutar la aplicación de React con Node ejecuta:
Linux y Windows
cd front
npm install
npm run devdocker ps -a # List all containers
docker start container
docker stop containerFormatear la respuesta json y que se vea bien.
curl localhost:9200/words/_search/?prettyBuscar palabras con que cumplen el formato
curl -X GET "localhost:9200/words/_search?pretty" -H 'Content-Type: application/json' -d'
{
"query": {
"wildcard": {
"word": {
"value": "?a?a"
}
}
},
"size": 20,
"from": 10
}
'Poblar índice con documentos en ElasticSearch
curl -X POST http://localhost:9200/_bulk -H "Content-Type: application/json" -d'
{ "index" : { "_index" : "words" } }
{ "word": "sana" }
{ "index" : { "_index" : "words" } }
{ "word": "gana" }
{ "index" : { "_index" : "words" } }
{ "word": "zebra" }
{ "index" : { "_index" : "words" } }
{ "word": "mono" }
{ "index" : { "_index" : "words" } }
{ "word": "portatil" }
'