{"id":24775739,"url":"https://github.com/inseefr/queen-back-office","last_synced_at":"2026-03-03T11:05:15.736Z","repository":{"id":37097955,"uuid":"247907189","full_name":"InseeFr/Queen-Back-Office","owner":"InseeFr","description":"Back-office services for Queen","archived":false,"fork":false,"pushed_at":"2025-10-02T17:46:13.000Z","size":6157,"stargazers_count":4,"open_issues_count":7,"forks_count":12,"subscribers_count":10,"default_branch":"main","last_synced_at":"2025-10-02T19:28:45.931Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/InseeFr.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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2020-03-17T07:36:46.000Z","updated_at":"2025-09-26T07:51:37.000Z","dependencies_parsed_at":"2025-04-23T10:25:04.513Z","dependency_job_id":"f2189dae-f65f-4828-bdce-403a899aefd5","html_url":"https://github.com/InseeFr/Queen-Back-Office","commit_stats":null,"previous_names":[],"tags_count":203,"template":false,"template_full_name":null,"purl":"pkg:github/InseeFr/Queen-Back-Office","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/InseeFr%2FQueen-Back-Office","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/InseeFr%2FQueen-Back-Office/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/InseeFr%2FQueen-Back-Office/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/InseeFr%2FQueen-Back-Office/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/InseeFr","download_url":"https://codeload.github.com/InseeFr/Queen-Back-Office/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/InseeFr%2FQueen-Back-Office/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279009509,"owners_count":26084609,"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","status":"online","status_checked_at":"2025-10-11T02:00:06.511Z","response_time":55,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":[],"created_at":"2025-01-29T06:55:28.272Z","updated_at":"2025-10-12T00:31:32.584Z","avatar_url":"https://github.com/InseeFr.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"![Build](https://github.com/InseeFr/Queen-Back-Office/actions/workflows/release.yml/badge.svg)\n\n# Queen-Back-Office\nBack-office services for Queen  \nREST API used for communication with Queen/Stromae UI\n\n## Modules\n- queen-application: api module for queen\n- queen-domain: business logic\n- queen-domain-pilotage: business logic for habilitations/interviewer specific features \n- queen-domain-depositproof: business logic for deposit proof generation\n- queen-infra-db: db access to queen data\n- queen-infra-depositproof: deposit proof generation\n- queen-infra-pilotage: access to pilotage api (check habilitations, ...)\n\n## Requirements\nFor building and running the application you need:\n- Java 21\n- Maven 3  \n\n## Install and execute unit tests\nUse the maven clean and maven install \n```shell\nmvn clean install\n```  \n\n## Running the application locally\nOn queen-application module: \n```shell\nmvn spring-boot:run\n```  \n\n## Database\nQueen-Back-Office uses postgresql as data source\n \n## Deployment\n### 1. Package the application\n```shell\nmvn clean package\n```  \nThe jar will be generated in `/target` repository  \n\n### 2. Launch app with embedded tomcat\n```shell\njava -jar app.jar\n```\n\n### 3. Application Access\nTo access the swagger-ui, use this url : [http://localhost:8080/swagger-ui/index.html](http://localhost:8080/swagger-ui/index.html)\n\n## Docker/Kubernetes\n\nA Dockerfile is present on this root project to deploy a container. You can [get docker images on docker hub](https://hub.docker.com/r/inseefr/queen-back-office/tags)\n\n[Helm chart repository](https://github.com/InseeFr/Helm-Charts/) is available for the queen backoffice/db/frontend\n\n\n## Liquibase\nLiquibase is enabled by default and run changelogs if needed.\n\n### Generate diff changelog between twos databases\nOn queen-infra-db module: \n\n```shell\n# Don't forget to edit configuration properties in pom.xml for this\nmvn liquibase:diff\n```\n\n#### Properties\nMinimal configuration for dev purpose only (no auth, no habilitation checks on pilotage api)\nUser is considered as authenticated admin user\n\n```yaml  \napplication:\n  corsOrigins: https://test.com #mandatory\n  # define folder where temp files will be created\n  # /!\\ do not use the OS default temp folder or java.io.tmpdir as it causes security issues\n  # give only access rights to this folder to the user executing the tomcat process \n  temp-folder: /opt/app/app-temp\nspring:\n  datasource:\n    url: jdbc:postgresql://localhost:5432/defaultSchema\n    username: \n    password: \n    driver-class-name: org.postgresql.Driver\n  jpa:\n    show-sql: true\n  jackson:\n    serialization:\n      indent_output: true\nlogging:\n  file:\n    name: /path/to/log/folder/queen.log\n  level:\n    root: INFO\nfeature:\n  oidc:\n    enabled: false\n\n  # enable swagger\n  swagger:\n    enabled: true\n\n  # enable pilotage api \n  pilotage:\n    enabled: false\n\n  # enable cache  \n  cache:\n    enabled: true\n  \n  # enable comment endpoints\n  comments:\n    enabled: true\n  \n  # enable interviewer features\n  interviewer-mode:\n    enabled: false\n```\n\nConfiguration example with OIDC/habilitations/interviewer features enabled\n\n```yaml  \napplication:\n  corsOrigins: https://test.com #mandatory\n  # define folder where temp files will be created\n  # /!\\ do not use the OS default temp folder or java.io.tmpdir as it causes security issues\n  # give only access rights to this folder to the user executing the tomcat process \n  temp-folder: /opt/app/app-temp\n  roles:\n    interviewer: interviewer_role\n    reviewer: reviewer_role\n    admin: admin_role\n    webclient: webclient_role\n    reviewer-alternative: reviewer_alternative_role\nspring:\n  datasource:\n    url: jdbc:postgresql://localhost:5432/defaultSchema\n    username: \n    password: \n    driver-class-name: org.postgresql.Driver\nlogging:\n  file:\n    name: /path/to/log/folder/queen.log\n  level:\n    root: INFO\nfeature:\n  oidc:\n    enabled: true\n    auth-server-host: https://auth-server.host\n    auth-server-url: ${feature.oidc.auth-server-host}/auth\n    client-id: my-client-id\n    realm: my-realm\n    principal-attribute: id-claim\n    role-claim: role-claim\n\n  # enable swagger\n  swagger:\n    enabled: true\n\n  # enable pilotage api \n  pilotage:\n    enabled: true\n    url:\n    alternative-habilitation:\n      url: http://alternative.url\n      campaignids-regex: ((edt)|(EDT))(\\d|\\S){1,}\n\n  # enable cache  \n  cache:\n    enabled: true\n  \n  # enable comment endpoints\n  comments:\n    enabled: true\n  \n  # enable interviewer features\n  interviewer-mode:\n    enabled: true\n```\n\n## End-Points\n- Campaign\n\t- `GET /campaigns` : Retrieve the campaigns the current user has access to\n    - `GET /admin/campaigns` : Retrieve all campaigns\n\t- `POST /campaigns` : Create a new campaign\n\t- `POST /campaign/context` : Integrate a full campaign (campaign/nomenclatures/questionnaires. The results of the integration indicate the successful/failed integrations\n\t- `DELETE /campaign/{id}` : Delete a campaign\n\t\n\n- Questionnaire\n\t- `GET /questionnaire/{id}` : Retrieve the data structure of a questionnaire\n\t- `GET /campaign/{id}/questionnaires` : Retrieve the data structure of all questionnaires linked to a campaign\n\t- `GET /campaign/{idCampaign}/questionnaire-id` : Retrieve all the questionnaire ids for a campaign\n\t- `POST /questionnaire-models` : Create a new questionnaire\n\n- Interrogation\n\t- `GET /interrogations` : Retrieve all interrogations id \n\t- `GET /interrogations/{id}` : Retrieve the interrogation\n\t- `GET /interrogations/{id}/deposit-prof` : Generate and retrieve a deposit proof (pdf file) for an interrogation\n\t- `GET /campaign/{id}/interrogations` : Retrieve all the interrogations of a campaign\n\t- `PUT /interrogations/{id}` : Update an interrogation\n    - `GET /interrogations/interviewer` : Retrieve all the interrogations of the current interviewer\n\t- `POST /campaign/{id}/interrogation` : Create or update an interrogation\n\t- `DELETE /interrogations/{id}` : Delete an interrogation\n\n- Data\n\t- `GET /interrogations/{id}/data` : Retrieve the data of an interrogation\n\t- `PUT /interrogations/{id}/data` : Update the data of an interrogation\n\n- Comment\n\t- `GET /interrogations/{id}/comment` : Retrieve the comment of an interrogation\n\t- `PUT /interrogations/{id}/comment` : Update the comment of an interrogation\n\n- Nomenclatures\n\t- `GET /questionnaire/{id}/required-nomenclatures` : Retrieve all required nomenclatures of a questionnaire\n    - `GET /campaign/{id}/required-nomenclatures` : Retrieve all required nomenclatures of a campaign\n\t- `GET /nomenclature/{id}` : Retrieve the json value of a nomenclature\n\t- `POST /nomenclature` : Create/update a nomenclature\n    - `GET /nomenclatures` : Retrieve all nomenclatures ids\n\n- Personalization\n\t- `GET /interrogations/{id}/personalization` : Retrieve the personalization of an interrogation\n\t- `PUT /interrogations/{id}/personalization` : Update the personalization of an interrogation\n\t\n- Metadata\n\t- `GET /campaign/{id}/metadata` : Retrieve campaign metadata\n\t- `GET /questionnaire/{id}/metadata` : Retrieve campaign metadata\n\n- Paradata\n\t- `POST /paradata` : Create a paradata event for an interrogation\n\t\n- StateData\n\t- `GET /interrogations/{id}/state-data` : Retrieve the state-data of an interrogation\n\t- `PUT /interrogations/{id}/state-data` : Update the state-data of an interrogation\n\t- `POST /interrogations/state-data` : Get state-data for all interrogations defined in request body\n\n## Libraries used\n- spring-boot-data-jpa\n- spring-boot-security\n- spring-boot-web\n- spring-boot-tomcat\n- spring-boot-test\n- spring-boot-starter-oauth2-resource-server\n- liquibase\n- postgresql\n- junit\n- springdoc\n- caffeine (cache)\n\n## License\nPlease check [LICENSE](https://github.com/InseeFr/Queen-Back-Office/blob/main/LICENSE) file\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finseefr%2Fqueen-back-office","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Finseefr%2Fqueen-back-office","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finseefr%2Fqueen-back-office/lists"}