{"id":24750787,"url":"https://github.com/ryan-ribeiro/gamelist-api","last_synced_at":"2026-04-10T06:53:09.069Z","repository":{"id":274365210,"uuid":"919523840","full_name":"ryan-ribeiro/gamelist-api","owner":"ryan-ribeiro","description":"Backend of a game list Rest API coded in Java 17 using Spring Boot Framework, Maven, Hibernate, and JPA. Databases: H2 and Postsgresql. CORS included using the Railway. Has CI/CD deployment; Local homologation; Docker Compose; Swagger ","archived":false,"fork":false,"pushed_at":"2025-02-06T20:45:22.000Z","size":38,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-23T03:21:27.612Z","etag":null,"topics":["api-rest","cicd","docker-com","gamelist","homologation","java-17-maven-spring-boot-hibernate-jpa","nativequery","postgresql","railway","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/ryan-ribeiro.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}},"created_at":"2025-01-20T14:49:22.000Z","updated_at":"2025-02-17T17:56:31.000Z","dependencies_parsed_at":"2025-01-26T21:37:04.968Z","dependency_job_id":null,"html_url":"https://github.com/ryan-ribeiro/gamelist-api","commit_stats":null,"previous_names":["ryan-ribeiro/gamelist-api"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ryan-ribeiro/gamelist-api","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryan-ribeiro%2Fgamelist-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryan-ribeiro%2Fgamelist-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryan-ribeiro%2Fgamelist-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryan-ribeiro%2Fgamelist-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ryan-ribeiro","download_url":"https://codeload.github.com/ryan-ribeiro/gamelist-api/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryan-ribeiro%2Fgamelist-api/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265402833,"owners_count":23759237,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["api-rest","cicd","docker-com","gamelist","homologation","java-17-maven-spring-boot-hibernate-jpa","nativequery","postgresql","railway","spring-boot"],"created_at":"2025-01-28T09:08:56.013Z","updated_at":"2025-12-30T21:30:41.511Z","avatar_url":"https://github.com/ryan-ribeiro.png","language":"Java","readme":"# Projeto gamelist-api\n## Modelo de domínio \n\n![Modelo de domínio DSList](https://raw.githubusercontent.com/devsuperior/java-spring-dslist/main/resources/dslist-model.png)\n\n## Trechos de código\n\n### Plug-in Maven\n\n```xml\n\u003cplugin\u003e\n\t\u003cgroupId\u003eorg.apache.maven.plugins\u003c/groupId\u003e\n\t\u003cartifactId\u003emaven-resources-plugin\u003c/artifactId\u003e\n\t\u003cversion\u003e3.1.0\u003c/version\u003e \u003c!--$NO-MVN-MAN-VER$ --\u003e\n\u003c/plugin\u003e\n```\n\n### application.properties\n\n```\nspring.profiles.active=${APP_PROFILE:test}\nspring.jpa.open-in-view=false\n\ncors.origins=${CORS_ORIGINS:http://localhost:5173,http://localhost:3000}\n```\n\n### application-test.properties\n\n```\n# H2 Connection\nspring.datasource.url=jdbc:h2:mem:testdb\nspring.datasource.username=admin\nspring.datasource.password=\n\n# H2 Client\nspring.h2.console.enabled=true\nspring.h2.console.path=/h2-console\n\n# Show SQL\nspring.jpa.show-sql=true\nspring.jpa.properties.hibernate.format_sql=true\n```\n\n### application-dev.properties\n\n```\n#spring.jpa.properties.jakarta.persistence.schema-generation.create-source=metadata\n#spring.jpa.properties.jakarta.persistence.schema-generation.scripts.action=create\n#spring.jpa.properties.jakarta.persistence.schema-generation.scripts.create-target=create.sql\n#spring.jpa.properties.hibernate.hbm2ddl.delimiter=;\n\nspring.datasource.url=jdbc:postgresql://localhost:5432/dscatalog\nspring.datasource.username=postgres\nspring.datasource.password=1234567\n\nspring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect\nspring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true\nspring.jpa.hibernate.ddl-auto=none\n```\n\n### application-prod.properties\n```\nspring.datasource.url=${DB_URL}\nspring.datasource.username=${DB_USERNAME}\nspring.datasource.password=${DB_PASSWORD}\n\nspring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect\nspring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true\nspring.jpa.hibernate.ddl-auto=none\n```\n\n### system.properties\n```\njava.runtime.version=17\n```\n\n### WebConfig\n\n```java\n@Configuration\npublic class WebConfig {\n\n\t@Value(\"${cors.origins}\")\n\tprivate String corsOrigins;\n\t\n\t@Bean\n\tpublic WebMvcConfigurer corsConfigurer() {\n\t\treturn new WebMvcConfigurer() {\n\t\t\t@Override\n\t\t\tpublic void addCorsMappings(CorsRegistry registry) {\n\t\t\t\tregistry.addMapping(\"/**\").allowedMethods(\"*\").allowedOrigins(corsOrigins);\n\t\t\t}\n\t\t};\n\t}\n\t\n}\n```\n\n### GameRepository\n\n```java\n@Query(nativeQuery = true, value = \"\"\"\n\t\t    SELECT \n\t\t        tb_game.id, \n\t\t        tb_game.title, \n\t\t        tb_game.game_year AS \"year\", \n\t\t        tb_game.img_url AS imgUrl, \n\t\t        tb_game.short_description AS shortDescription, \n\t\t        tb_belonging.position\n\t\t    FROM tb_game\n\t\t    INNER JOIN tb_belonging ON tb_game.id = tb_belonging.game_id\n\t\t    WHERE tb_belonging.list_id =:listId\n\t\t    ORDER BY tb_belonging.position\n\t\t    \"\"\")\n\n\tList\u003cGameMinProjection\u003e searchByList(Long listId);\n\t\n\t@Query(nativeQuery = true, value = \"\"\"\n\t\t\tSELECT\n\t\t\t    tb_game.id,\n\t\t\t    tb_game.title,\n\t\t\t    tb_game.game_year AS \"year\",\n\t\t\t    tb_game.img_url AS imgUrl,\n\t\t\t    tb_game.short_description AS shortDescription,\n\t\t\t    tb_belonging.position\n\t\t\tFROM\n\t\t\t    tb_game\n\t\t\tINNER JOIN\n\t\t\t    tb_belonging ON tb_game.id = tb_belonging.game_id\n\t\t\tWHERE\n\t\t\t    LOWER(tb_game.title) LIKE LOWER(:title || '%')\n\t\t\tORDER BY\n\t\t\t    tb_game.score;\n\t        \"\"\")\n\tList\u003cGameMinProjection\u003e searchByTitle(@Param(\"title\") String title);\n```\n\n### GameListRepository\n\n```java\n@Modifying\n@Query(nativeQuery = true, value = \"UPDATE tb_belonging SET position = :newPosition WHERE list_id = :listId AND game_id = :gameId\")\nvoid updateBelongingPosition(Long listId, Long gameId, Integer newPosition);\n```\n\n### import.sql\n\n```sql\nINSERT INTO tb_game_list (name) VALUES ('Aventura e RPG');\nINSERT INTO tb_game_list (name) VALUES ('Jogos de plataforma');\n\nINSERT INTO tb_game (title, score, game_year, genre, platforms, img_url, short_description, long_description) VALUES ('Mass Effect Trilogy', 4.8, 2012, 'Role-playing (RPG), Shooter', 'XBox, Playstation, PC', 'https://raw.githubusercontent.com/devsuperior/java-spring-dslist/main/resources/1.png', 'Lorem ipsum dolor sit amet consectetur adipisicing elit. Odit esse officiis corrupti unde repellat non quibusdam! Id nihil itaque ipsum!', 'Lorem ipsum dolor sit amet consectetur adipisicing elit. Delectus dolorum illum placeat eligendi, quis maiores veniam. Incidunt dolorum, nisi deleniti dicta odit voluptatem nam provident temporibus reprehenderit blanditiis consectetur tenetur. Dignissimos blanditiis quod corporis iste, aliquid perspiciatis architecto quasi tempore ipsam voluptates ea ad distinctio, sapiente qui, amet quidem culpa.');\nINSERT INTO tb_game (title, score, game_year, genre, platforms, img_url, short_description, long_description) VALUES ('Red Dead Redemption 2', 4.7, 2018, 'Role-playing (RPG), Adventure', 'XBox, Playstation, PC', 'https://raw.githubusercontent.com/devsuperior/java-spring-dslist/main/resources/2.png', 'Lorem ipsum dolor sit amet consectetur adipisicing elit. Odit esse officiis corrupti unde repellat non quibusdam! Id nihil itaque ipsum!', 'Lorem ipsum dolor sit amet consectetur adipisicing elit. Delectus dolorum illum placeat eligendi, quis maiores veniam. Incidunt dolorum, nisi deleniti dicta odit voluptatem nam provident temporibus reprehenderit blanditiis consectetur tenetur. Dignissimos blanditiis quod corporis iste, aliquid perspiciatis architecto quasi tempore ipsam voluptates ea ad distinctio, sapiente qui, amet quidem culpa.');\nINSERT INTO tb_game (title, score, game_year, genre, platforms, img_url, short_description, long_description) VALUES ('The Witcher 3: Wild Hunt', 4.7, 2014, 'Role-playing (RPG), Adventure', 'XBox, Playstation, PC', 'https://raw.githubusercontent.com/devsuperior/java-spring-dslist/main/resources/3.png', 'Lorem ipsum dolor sit amet consectetur adipisicing elit. Odit esse officiis corrupti unde repellat non quibusdam! Id nihil itaque ipsum!', 'Lorem ipsum dolor sit amet consectetur adipisicing elit. Delectus dolorum illum placeat eligendi, quis maiores veniam. Incidunt dolorum, nisi deleniti dicta odit voluptatem nam provident temporibus reprehenderit blanditiis consectetur tenetur. Dignissimos blanditiis quod corporis iste, aliquid perspiciatis architecto quasi tempore ipsam voluptates ea ad distinctio, sapiente qui, amet quidem culpa.');\nINSERT INTO tb_game (title, score, game_year, genre, platforms, img_url, short_description, long_description) VALUES ('Sekiro: Shadows Die Twice', 3.8, 2019, 'Role-playing (RPG), Adventure', 'XBox, Playstation, PC', 'https://raw.githubusercontent.com/devsuperior/java-spring-dslist/main/resources/4.png', 'Lorem ipsum dolor sit amet consectetur adipisicing elit. Odit esse officiis corrupti unde repellat non quibusdam! Id nihil itaque ipsum!', 'Lorem ipsum dolor sit amet consectetur adipisicing elit. Delectus dolorum illum placeat eligendi, quis maiores veniam. Incidunt dolorum, nisi deleniti dicta odit voluptatem nam provident temporibus reprehenderit blanditiis consectetur tenetur. Dignissimos blanditiis quod corporis iste, aliquid perspiciatis architecto quasi tempore ipsam voluptates ea ad distinctio, sapiente qui, amet quidem culpa.');\nINSERT INTO tb_game (title, score, game_year, genre, platforms, img_url, short_description, long_description) VALUES ('Ghost of Tsushima', 4.6, 2012, 'Role-playing (RPG), Adventure', 'XBox, Playstation, PC', 'https://raw.githubusercontent.com/devsuperior/java-spring-dslist/main/resources/5.png', 'Lorem ipsum dolor sit amet consectetur adipisicing elit. Odit esse officiis corrupti unde repellat non quibusdam! Id nihil itaque ipsum!', 'Lorem ipsum dolor sit amet consectetur adipisicing elit. Delectus dolorum illum placeat eligendi, quis maiores veniam. Incidunt dolorum, nisi deleniti dicta odit voluptatem nam provident temporibus reprehenderit blanditiis consectetur tenetur. Dignissimos blanditiis quod corporis iste, aliquid perspiciatis architecto quasi tempore ipsam voluptates ea ad distinctio, sapiente qui, amet quidem culpa.');\nINSERT INTO tb_game (title, score, game_year, genre, platforms, img_url, short_description, long_description) VALUES ('Super Mario World', 4.7, 1990, 'Platform', 'Super Ness, PC', 'https://raw.githubusercontent.com/devsuperior/java-spring-dslist/main/resources/6.png', 'Lorem ipsum dolor sit amet consectetur adipisicing elit. Odit esse officiis corrupti unde repellat non quibusdam! Id nihil itaque ipsum!', 'Lorem ipsum dolor sit amet consectetur adipisicing elit. Delectus dolorum illum placeat eligendi, quis maiores veniam. Incidunt dolorum, nisi deleniti dicta odit voluptatem nam provident temporibus reprehenderit blanditiis consectetur tenetur. Dignissimos blanditiis quod corporis iste, aliquid perspiciatis architecto quasi tempore ipsam voluptates ea ad distinctio, sapiente qui, amet quidem culpa.');\nINSERT INTO tb_game (title, score, game_year, genre, platforms, img_url, short_description, long_description) VALUES ('Hollow Knight', 4.6, 2017, 'Platform', 'XBox, Playstation, PC', 'https://raw.githubusercontent.com/devsuperior/java-spring-dslist/main/resources/7.png', 'Lorem ipsum dolor sit amet consectetur adipisicing elit. Odit esse officiis corrupti unde repellat non quibusdam! Id nihil itaque ipsum!', 'Lorem ipsum dolor sit amet consectetur adipisicing elit. Delectus dolorum illum placeat eligendi, quis maiores veniam. Incidunt dolorum, nisi deleniti dicta odit voluptatem nam provident temporibus reprehenderit blanditiis consectetur tenetur. Dignissimos blanditiis quod corporis iste, aliquid perspiciatis architecto quasi tempore ipsam voluptates ea ad distinctio, sapiente qui, amet quidem culpa.');\nINSERT INTO tb_game (title, score, game_year, genre, platforms, img_url, short_description, long_description) VALUES ('Ori and the Blind Forest', 4, 2015, 'Platform', 'XBox, Playstation, PC', 'https://raw.githubusercontent.com/devsuperior/java-spring-dslist/main/resources/8.png', 'Lorem ipsum dolor sit amet consectetur adipisicing elit. Odit esse officiis corrupti unde repellat non quibusdam! Id nihil itaque ipsum!', 'Lorem ipsum dolor sit amet consectetur adipisicing elit. Delectus dolorum illum placeat eligendi, quis maiores veniam. Incidunt dolorum, nisi deleniti dicta odit voluptatem nam provident temporibus reprehenderit blanditiis consectetur tenetur. Dignissimos blanditiis quod corporis iste, aliquid perspiciatis architecto quasi tempore ipsam voluptates ea ad distinctio, sapiente qui, amet quidem culpa.');\nINSERT INTO tb_game (title, score, game_year, genre, platforms, img_url, short_description, long_description) VALUES ('Cuphead', 4.6, 2017, 'Platform', 'XBox, Playstation, PC', 'https://raw.githubusercontent.com/devsuperior/java-spring-dslist/main/resources/9.png', 'Lorem ipsum dolor sit amet consectetur adipisicing elit. Odit esse officiis corrupti unde repellat non quibusdam! Id nihil itaque ipsum!', 'Lorem ipsum dolor sit amet consectetur adipisicing elit. Delectus dolorum illum placeat eligendi, quis maiores veniam. Incidunt dolorum, nisi deleniti dicta odit voluptatem nam provident temporibus reprehenderit blanditiis consectetur tenetur. Dignissimos blanditiis quod corporis iste, aliquid perspiciatis architecto quasi tempore ipsam voluptates ea ad distinctio, sapiente qui, amet quidem culpa.');\nINSERT INTO tb_game (title, score, game_year, genre, platforms, img_url, short_description, long_description) VALUES ('Sonic CD', 4, 1993, 'Platform', 'Sega CD, PC', 'https://raw.githubusercontent.com/devsuperior/java-spring-dslist/main/resources/10.png', 'Lorem ipsum dolor sit amet consectetur adipisicing elit. Odit esse officiis corrupti unde repellat non quibusdam! Id nihil itaque ipsum!', 'Lorem ipsum dolor sit amet consectetur adipisicing elit. Delectus dolorum illum placeat eligendi, quis maiores veniam. Incidunt dolorum, nisi deleniti dicta odit voluptatem nam provident temporibus reprehenderit blanditiis consectetur tenetur. Dignissimos blanditiis quod corporis iste, aliquid perspiciatis architecto quasi tempore ipsam voluptates ea ad distinctio, sapiente qui, amet quidem culpa.');\n\nINSERT INTO tb_belonging (list_id, game_id, position) VALUES (1, 1, 0);\nINSERT INTO tb_belonging (list_id, game_id, position) VALUES (1, 2, 1);\nINSERT INTO tb_belonging (list_id, game_id, position) VALUES (1, 3, 2);\nINSERT INTO tb_belonging (list_id, game_id, position) VALUES (1, 4, 3);\nINSERT INTO tb_belonging (list_id, game_id, position) VALUES (1, 5, 4);\n\nINSERT INTO tb_belonging (list_id, game_id, position) VALUES (2, 6, 0);\nINSERT INTO tb_belonging (list_id, game_id, position) VALUES (2, 7, 1);\nINSERT INTO tb_belonging (list_id, game_id, position) VALUES (2, 8, 2);\nINSERT INTO tb_belonging (list_id, game_id, position) VALUES (2, 9, 3);\nINSERT INTO tb_belonging (list_id, game_id, position) VALUES (2, 10, 4);\n```\n\n### Script Docker Compose\n\nhttps://gist.github.com/acenelio/5e40b27cfc40151e36beec1e27c4ff71\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fryan-ribeiro%2Fgamelist-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fryan-ribeiro%2Fgamelist-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fryan-ribeiro%2Fgamelist-api/lists"}