{"id":15508569,"url":"https://github.com/vincejv/fpi-framework","last_synced_at":"2025-04-23T02:23:56.750Z","repository":{"id":60428922,"uuid":"534265255","full_name":"vincejv/fpi-framework","owner":"vincejv","description":"FPI Reactive API backend Framework, built on top of Quarkus","archived":false,"fork":false,"pushed_at":"2024-02-28T22:34:05.000Z","size":562,"stargazers_count":3,"open_issues_count":8,"forks_count":2,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-03-29T21:11:18.736Z","etag":null,"topics":["framework","gcp","gcp-cloud-build","gcp-cloud-run","java","java-17","maven","microservice","mongodb","quarkus"],"latest_commit_sha":null,"homepage":"https://florenz.abavilla.com","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vincejv.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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":"2022-09-08T15:02:51.000Z","updated_at":"2023-04-26T12:04:02.000Z","dependencies_parsed_at":"2023-12-02T10:30:09.507Z","dependency_job_id":"fc30bd9f-0f90-4a0e-a1dc-3257e4ad9323","html_url":"https://github.com/vincejv/fpi-framework","commit_stats":null,"previous_names":[],"tags_count":90,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vincejv%2Ffpi-framework","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vincejv%2Ffpi-framework/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vincejv%2Ffpi-framework/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vincejv%2Ffpi-framework/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vincejv","download_url":"https://codeload.github.com/vincejv/fpi-framework/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250355516,"owners_count":21416919,"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":["framework","gcp","gcp-cloud-build","gcp-cloud-run","java","java-17","maven","microservice","mongodb","quarkus"],"created_at":"2024-10-02T09:39:09.830Z","updated_at":"2025-04-23T02:23:56.732Z","avatar_url":"https://github.com/vincejv.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cimg src=\"banner.png\" alt=\"FPI Framework\" width=\"500\"/\u003e\n\n[![Maven Central version](https://img.shields.io/maven-central/v/com.abavilla/fpi-framework?logo=apache-maven)](https://search.maven.org/artifact/com.abavilla/fpi-framework-core)\n[![GitHub Workflow Status](https://img.shields.io/github/workflow/status/vincejv/fpi-framework/Maven%20Central%20deployment?label=CI/CD\u0026logo=github)](https://github.com/vincejv/fpi-framework/actions?query=workflow%3A%22Maven+Central+deployment%22)\n[![License](https://img.shields.io/github/license/vincejv/fpi-framework?logo=apache)](https://github.com/vincejv/fpi-framework/blob/main/LICENSE)\n[![GitHub commit activity](https://img.shields.io/github/commit-activity/m/vincejv/fpi-framework?label=commits\u0026logo=git)](https://github.com/vincejv/fpi-framework/pulse)\n[![Sonarcloud Status](https://sonarcloud.io/api/project_badges/measure?project=vincejv_fpi-framework\u0026metric=alert_status)](https://sonarcloud.io/dashboard?id=vincejv_fpi-framework)\n[![Duplicated Lines (%)](https://sonarcloud.io/api/project_badges/measure?project=vincejv_fpi-framework\u0026metric=duplicated_lines_density)](https://sonarcloud.io/dashboard?id=vincejv_fpi-framework)\n[![Reliability Rating](https://sonarcloud.io/api/project_badges/measure?project=vincejv_fpi-framework\u0026metric=reliability_rating)](https://sonarcloud.io/dashboard?id=vincejv_fpi-framework)\n[![SonarCloud Bugs](https://sonarcloud.io/api/project_badges/measure?project=vincejv_fpi-framework\u0026metric=bugs)](https://sonarcloud.io/component_measures/metric/reliability_rating/list?id=vincejv_fpi-framework)\n[![SonarCloud Vulnerabilities](https://sonarcloud.io/api/project_badges/measure?project=vincejv_fpi-framework\u0026metric=vulnerabilities)](https://sonarcloud.io/component_measures/metric/security_rating/list?id=vincejv_fpi-framework)\n[![Security Rating](https://sonarcloud.io/api/project_badges/measure?project=vincejv_fpi-framework\u0026metric=security_rating)](https://sonarcloud.io/dashboard?id=vincejv_fpi-framework)\n[![Lines of Code](https://sonarcloud.io/api/project_badges/measure?project=vincejv_fpi-framework\u0026metric=ncloc)](https://sonarcloud.io/dashboard?id=vincejv_fpi-framework)\n\n### Importing the POM (choose 1 option)\n\n#### As Parent POM\n```xml\n\u003cparent\u003e\n  \u003c!-- FPI Framework Parent POM --\u003e\n  \u003cgroupId\u003ecom.abavilla\u003c/groupId\u003e\n  \u003cartifactId\u003efpi-framework-pom\u003c/artifactId\u003e\n  \u003cversion\u003e1.1.1\u003c/version\u003e \u003c!-- replace with latest version --\u003e\n\u003c/parent\u003e\n\u003c!-- As dependencies are defined in parent POM\n no need to add FPI Framework Core as a dependency --\u003e\n```\n\n#### As BOM\n```xml\n\u003cdependencyManagement\u003e\n  \u003cdependency\u003e\n    \u003c!-- FPI Framework BOM --\u003e\n    \u003cgroupId\u003ecom.abavilla\u003c/groupId\u003e\n    \u003cartifactId\u003efpi-framework-bom\u003c/artifactId\u003e\n    \u003cversion\u003e1.1.1\u003c/version\u003e \u003c!-- replace with latest version --\u003e\n    \u003ctype\u003epom\u003c/type\u003e\n    \u003cscope\u003eimport\u003c/scope\u003e\n  \u003c/dependency\u003e\n\u003c/dependencyManagement\u003e\n\n\u003cdependencies\u003e\n  \u003c!-- FPI Framework Core dependency --\u003e\n  \u003cdependency\u003e\n    \u003cgroupId\u003ecom.abavilla\u003c/groupId\u003e\n    \u003cartifactId\u003efpi-framework-core\u003c/artifactId\u003e\n  \u003c/dependency\u003e\n\u003c/dependencies\u003e\n```\n\n### Sample Usage\n#### Entity\n```java\n@Data\n@EqualsAndHashCode(callSuper = true)\n@NoArgsConstructor\n@BsonDiscriminator\n@MongoEntity(collection=\"students\")\npublic class Student extends AbsMongoItem {\n  /** Student name */\n  private String name;\n  /** Student home address */\n  private String address;\n  /** Student gender */\n  private String gender;\n\n  // Getters and setters are generated by lombok\n  // during compile time, no need to specify them\n}\n```\n\n#### DTO (Data Transfer Object)\n```java\n@Data\n@EqualsAndHashCode(callSuper = true)\n@NoArgsConstructor\npublic class StudentDto extends AbsDto {\n  /** Student name */\n  private String name;\n  /** Student gender */\n  private String gender;\n  \n  // Getters and setters are generated by lombok\n  // during compile time, no need to specify them\n}\n```\n\n#### Repository\n```java\n@ApplicationScoped\npublic class StudentRepo \n  extends AbsMongoRepo\u003cStudent\u003e {\n  // No need to specify a body as AbsMongoRepo\n  // extends from Panache repository, and already\n  // implements the basic CRUD methods\n}\n```\n\n#### DTO to Entity Mapstruct Mapper\n```java\n@Mapper(componentModel = MappingConstants.ComponentModel.CDI,\n    injectionStrategy = InjectionStrategy.CONSTRUCTOR)\npublic interface StudentMapper \n  extends IDtoToEntityMapper\u003cStudentDto, Student\u003e {\n  // Mapstruct will generate the mappings during compile time,\n  // and mo need to specify a body as IDtoToEntityMapper specifies\n  // the commonly used mapping methods\n}\n```\n\n#### Service Layer\n```java\n@ApplicationScoped\npublic class StudentSvc\n  // Alternatively, may extend with AbsRepoSvc if\n  // you need a customized repository\n  extends AbsSvc\u003cStudentDto, Student\u003e {\n  /** Mapstruct Mapper */\n  @Inject\n  StudentMapper mapper;\n  \n  // Built in asynchronous (Mutiny) CRUD methods, all you \n  // have to specify are the mapping methods to convert\n  // a DTO to entity and vice versa\n  \n  @Override\n  public StudentDto mapToDto(Student entity) {\n    return mapper.mapToDto(entity);\n  }\n\n  @Override\n  public Student mapToEntity(StudentDto dto) {\n    return mapper.mapToEntity(dto);\n  }\n}\n```\n\n#### REST Controller\n```java\n@Path(\"/fpi/cx\")\npublic class StudentResource\n    // Alternatively, may extend from AbsBaseResource,\n    // or AbsReadOnlyResource for specific use case scenarios \n    extends AbsResource\u003cStudentDto, Student, StudentSvc\u003e {\n  // ...\n  // Built in asynchronous (Mutiny) CRUD methods for GET, POST,\n  // PATCH, DELETE are implemented by default, you may customize\n  // or add your own methods for specific requirements\n  // ...\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvincejv%2Ffpi-framework","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvincejv%2Ffpi-framework","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvincejv%2Ffpi-framework/lists"}