{"id":48289041,"url":"https://github.com/gamm95/hotel_api","last_synced_at":"2026-04-04T23:00:50.578Z","repository":{"id":334091620,"uuid":"1138346920","full_name":"GAMM95/hotel_api","owner":"GAMM95","description":"Backend en Spring Boot para gestionar reservas, habitaciones, servicios y pagos de una cadena de hoteles. Incluye control de usuarios, roles, estados de reservas y persistencia en PostgreSQL.","archived":false,"fork":false,"pushed_at":"2026-01-22T18:33:16.000Z","size":102,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-23T11:32:19.004Z","etag":null,"topics":["apirestfull","java21","jpa","postgresql-database","spring-boot"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/GAMM95.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-01-20T14:59:18.000Z","updated_at":"2026-01-22T18:34:42.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/GAMM95/hotel_api","commit_stats":null,"previous_names":["gamm95/hotel_api"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/GAMM95/hotel_api","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GAMM95%2Fhotel_api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GAMM95%2Fhotel_api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GAMM95%2Fhotel_api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GAMM95%2Fhotel_api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/GAMM95","download_url":"https://codeload.github.com/GAMM95/hotel_api/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GAMM95%2Fhotel_api/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31418286,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-04T20:09:54.854Z","status":"ssl_error","status_checked_at":"2026-04-04T20:09:44.350Z","response_time":60,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["apirestfull","java21","jpa","postgresql-database","spring-boot"],"created_at":"2026-04-04T23:00:41.276Z","updated_at":"2026-04-04T23:00:50.516Z","avatar_url":"https://github.com/GAMM95.png","language":"Java","readme":"\n# Hotel API Backend – Cadena Hotelera\n\n---\nAPI REST para gestión de hoteles, habitaciones, reservas, servicios y pagos, desarrollada con Spring Boot y PostgreSQL, pensada para una cadena hotelera.\n\n## Tecnologías\n\n**Backend:** Java 17, Spring Boot 4.0, Spring Data JPA / Hibernate, MapStruct (DTO ↔ Entidad), Lombok (opcional)\n\n**Base de datos:** PostgreSQL\n\n\n## Entidades y Tablas\n| Entidad          | Descripción          |\n|:-----------------|:------------------------------------------------------|\n| `Persona`        | Datos personales de usuarios y huéspedes (nombre, correo, documento, teléfono). |\n| `Usuario`        | Usuarios del sistema, con rol, login y relación con `Persona`.                  |\n| `Huesped`        | Extiende `Persona`, asociado a reservas y con información de nacionalidad.      |\n| `Hotel`          | Información de cada hotel de la cadena (nombre, dirección, estrellas).          |\n| `TipoHabitacion` | Tipos de habitaciones (capacidad, precio base, descripción).                    |\n| `Habitacion`     | Habitaciones físicas, asociadas a `TipoHabitacion` y `Hotel`.                   |\n| `Servicio`       | Servicios adicionales ofrecidos por el hotel (spa, desayuno, etc.).             |\n| `Reserva`        | Registro de reserva de un huésped a una habitación y servicios.                 |\n| `DetalleReserva` | Detalles de servicios incluidos en una reserva (cantidad).                      |\n| `Pago`           | Pagos asociados a reservas, con estado y fecha.                                 |\n\n### UML\n![Diagrama UML](https://raw.githubusercontent.com/GAMM95/hotel_api/main/src/main/resources/UML.png)\n\n## Reglas de Negocio\n1. **Reservas**\n    - Solo se pueden crear reservas en fechas futuras.\n    - La fecha de inicio no puede ser mayor que la fecha de fin.\n    - No se puede reservar una habitación que ya esté ocupada o en mantenimiento.\n    - Una habitación no puede tener reservas que se solapen en el mismo rango de fechas.\n\n2. **Estados de Reserva**\n\n   | Estado        | Descripción |\n   |---------------|------------|\n   | `PENDIENTE`   | Reserva creada, pero no confirmada. |\n   | `CONFIRMADA`  | Pagada y confirmada; habitación pasa a `RESERVADA`. |\n   | `OCUPADA`     | Check-in realizado; habitación ocupada. |\n   | `FINALIZADA`  | Check-out realizado; habitación vuelve a `DISPONIBLE`. |\n   | `CANCELADA`   | Reserva cancelada; pagos previos pueden anularse, habitación liberada. |\n\n3. **Check-in y Check-out**\n    - Solo se puede hacer check-in si la reserva está `CONFIRMADA`.\n    - Check-out solo se permite si la habitación está `OCUPADA`.\n    - Al hacer check-in, la habitación pasa a `OCUPADA`.\n    - Al hacer check-out o cancelar, la habitación vuelve a `DISPONIBLE`.\n\n4. **Pagos**\n    - Solo se puede confirmar una reserva si existe al menos un pago en estado `PAGADO`.\n    - Al cancelar una reserva antes del check-in, los pagos `PAGADO` se marcan como `ANULADO`.\n\n5. **Modificaciones**\n    - Solo se pueden modificar reservas en estado `PENDIENTE`.\n    - Cambiar fechas requiere que no existan cruces con otras reservas de la misma habitación.\n    - Se pueden añadir, eliminar o actualizar servicios asociados mientras la reserva esté `PENDIENTE`.\n\n6. **Eliminación**\n    - No se pueden eliminar reservas `CONFIRMADAS` o `FINALIZADAS`.\n    - Las reservas `PENDIENTE` o `CANCELADA` sí se pueden eliminar, liberando la habitación asociada.\n\n7. **Servicios**\n    - Cada servicio debe pertenecer al mismo hotel que la habitación de la reserva.\n    - La cantidad de cada servicio debe ser mayor que 0.\n\n---\n## Configuración y Ejecución\nLa aplicación se configura principalmente con `application.properties` y variables de entorno.\n\n### Variables principales\n```properties\nspring.profiles.active=dev\nserver.port=8080\nspring.datasource.url=jdbc:postgresql://localhost:5432/hotel_db\nspring.datasource.username=postgres\nspring.datasource.password=secret\n```\n---\n## API's Ejemplos\n### 1. Huéspedes\n- ####  Crear huésped - POST: `/api/huespedes`\n   ```json \n   {\n      \"nombre\": \"Gustavo\",\n      \"apellidos\": \"Mantilla Miñano\",\n      \"email\": \"gushmm9823@gmail.com\",\n      \"telefono\": \"950212900\",\n      \"tipoDocumento\": \"DNI\",\n      \"numeroDocumento\": \"70555740\",\n      \"fechaNacimiento\": \"1998-02-23\",\n      \"nacionalidad\": \"Peruana\"\n   }\n   ```\n- #### Listar huéspedes - GET: `/api/huespedes`\n\n\n### 2. Hoteles\n- #### Crear hotel - POST: `/api/hoteles`\n   ```json\n   {\n     \"nombre\": \"Hotel Sol\",\n     \"direccion\": \"Av. Central 123\",\n     \"ciudad\": \"Lima\",\n     \"estrellas\": 4\n   }\n   ```\n\n- #### Buscar hoteles por ciudad - GET: `/api/hoteles/buscar/ciudad?ciudad=Lima`\n\n### 3. Tipos de habitación\n- #### Listar todos - GET `/api/tipos-habitacion`\n- #### Buscar por capacidad - GET: `/api/tipos-habitacion/buscar/capacidad?capacidad=2`\n\n\n### 4. Habitaciones\n- #### Registrar habitación - POST: `/api/habitaciones`\n  ```json\n  {\n    \"idHotel\": 1,\n    \"idTipoHabitacion\": 2,\n    \"numero\": \"101\",\n    \"estado\": \"DISPONIBLE\"\n  }\n  ```\n- #### Buscar habitaciones - GET: `/api/habitaciones/buscar?idHotel=1\u0026estado=DISPONIBLE`\n\n### 5. Servicios\n- #### Crear servicio - POST: `/api/servicios`\n   ```json\n   {\n     \"nombre\": \"Transporte aeropuerto\",\n     \"descripcion\": \"Traslado desde o hacia el aeropuerto\",\n     \"precio\": 25.00,\n     \"idHotel\": 1\n   }\n   ```\n- #### Buscar por rango de precio - GET: `/api/servicios/buscar-por-rango?min=50\u0026max=150`\n\n### 6. Reservas\n- #### Crear reserva con servicios - POST: `/api/reservas`\n   ```json\n   {\n     \"fechaInicio\": \"2026-02-01\",\n     \"fechaFin\": \"2026-02-05\",\n     \"idHuesped\": 1,\n     \"idHabitacion\": 5,\n     \"servicios\": [\n       { \"idServicio\": 2, \"cantidad\": 2 },\n       { \"idServicio\": 5, \"cantidad\": 1 }\n     ]\n   }\n   ```\n- #### Confirmar reserva - PUT: `/api/reservas/1/confirmar`\n- #### Cancelar reserva - PUT: `/api/reservas/1/cancelar`\n- #### Buscar reservas por fechas - GET: `/api/reservas/buscar/fechas?inicio=2026-02-01\u0026fin=2026-02-05`\n\n### 7. Pagos\n- #### Registrar pago - POST: `/api/pagos`\n   ``` json\n   {\n     \"idReserva\": 1,\n     \"monto\": 15.00,\n     \"metodo\": \"EFECTIVO\"\n   }\n   ```\n- #### Buscar pagos por estado - GET: `/api/pagos/buscar/estado?estado=PENDIENTE`\n\n## Autor\n\n- [@GAMM95](https://github.com/GAMM95)\n\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgamm95%2Fhotel_api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgamm95%2Fhotel_api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgamm95%2Fhotel_api/lists"}