├── .dockerignore ├── .github ├── DISCUSSION_TEMPLATE │ └── ideas.yml ├── ISSUE_TEMPLATE │ ├── bug_report.yml │ └── config.yml └── workflows │ ├── ci.yaml │ ├── docker-dev-image.yml │ ├── docker-prod-image.yml │ ├── e2e-test.yml │ ├── integration-test.yml │ └── publish-api-docs.yml ├── .gitignore ├── .npmrc ├── .nvmrc ├── .turbo └── .gitkeep ├── .vscode ├── extensions.json └── settings.json ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── GUIDE.md ├── LICENSE ├── README.md ├── apps ├── api │ ├── .env.example │ ├── .prettierignore │ ├── README.md │ ├── eslint.config.js │ ├── integration-test │ │ ├── database-utils.ts │ │ ├── global.setup.ts │ │ ├── global.teardown.ts │ │ ├── jest-integration.json │ │ ├── jest-integration.setup.ts │ │ └── test-specs │ │ │ ├── channel.integration-spec.ts │ │ │ ├── feedback.integration-spec.ts │ │ │ ├── issue.integration-spec.ts │ │ │ ├── project.integration-spec.ts │ │ │ ├── tenant.integration-spec.ts │ │ │ └── user.integration-spec.ts │ ├── jest.config.js │ ├── jest.setup.js │ ├── nest-cli.json │ ├── package.json │ ├── src │ │ ├── app.module.ts │ │ ├── common │ │ │ ├── decorators │ │ │ │ ├── api-ok-response-pagination.decorator.ts │ │ │ │ ├── dto-validator.spec.ts │ │ │ │ ├── dto-validator.ts │ │ │ │ ├── index.ts │ │ │ │ ├── is-password.spec.ts │ │ │ │ └── is-password.ts │ │ │ ├── dtos │ │ │ │ ├── index.ts │ │ │ │ ├── pagination-request.dto.ts │ │ │ │ ├── pagination-response.dto.ts │ │ │ │ ├── pagination.dto.ts │ │ │ │ └── time-range.dto.ts │ │ │ ├── entities │ │ │ │ ├── common.entity.ts │ │ │ │ └── index.ts │ │ │ ├── enums │ │ │ │ ├── event-status.enum.ts │ │ │ │ ├── event-type.enum.ts │ │ │ │ ├── field-format.enum.ts │ │ │ │ ├── field-property.enum.ts │ │ │ │ ├── field-status.enum.ts │ │ │ │ ├── index.ts │ │ │ │ ├── issue-status.enum.ts │ │ │ │ ├── query-v2-conditions.enum.ts │ │ │ │ ├── sort-method.enum.ts │ │ │ │ └── webhook-status.enum.ts │ │ │ ├── filters │ │ │ │ ├── http-exception.filter.ts │ │ │ │ └── index.ts │ │ │ ├── helper │ │ │ │ ├── cast.helper.ts │ │ │ │ └── paginate.helper.ts │ │ │ ├── repositories │ │ │ │ ├── dtos │ │ │ │ │ ├── create-data.dto.ts │ │ │ │ │ ├── create-index.dto.ts │ │ │ │ │ ├── delete-bulk-data.dto.ts │ │ │ │ │ ├── get-data.dto.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── put-mappings.dto.ts │ │ │ │ │ ├── scroll.dto.ts │ │ │ │ │ └── update-data.dto.ts │ │ │ │ ├── index.ts │ │ │ │ ├── large-window.exception.ts │ │ │ │ ├── opensearch.repository.spec.ts │ │ │ │ └── opensearch.repository.ts │ │ │ └── validators │ │ │ │ ├── array-distinct.ts │ │ │ │ ├── index.ts │ │ │ │ ├── token-validator.decorator.spec.ts │ │ │ │ └── token-validator.ts │ │ ├── configs │ │ │ ├── app.config.ts │ │ │ ├── jwt.config.ts │ │ │ ├── modules │ │ │ │ ├── index.ts │ │ │ │ ├── mailer-config │ │ │ │ │ ├── mailer-config.module.ts │ │ │ │ │ └── templates │ │ │ │ │ │ ├── invitation.hbs │ │ │ │ │ │ ├── resetPassword.hbs │ │ │ │ │ │ └── verification.hbs │ │ │ │ ├── opensearch-config │ │ │ │ │ └── opensearch-config.module.ts │ │ │ │ └── typeorm-config │ │ │ │ │ ├── migrations │ │ │ │ │ ├── 1692159572819-init.ts │ │ │ │ │ ├── 1692690482919-issue-name-unique.ts │ │ │ │ │ ├── 1700795163534-feedback-statistics.ts │ │ │ │ │ ├── 1700795948817-project-timezone-offset.ts │ │ │ │ │ ├── 1701090850194-issue-statistics.ts │ │ │ │ │ ├── 1701234953280-feedback-issue-statistics.ts │ │ │ │ │ ├── 1701914129112-image-config.ts │ │ │ │ │ ├── 1701931484534-image-format.ts │ │ │ │ │ ├── 1702536442621-project-timezoneOffset-default.ts │ │ │ │ │ ├── 1705398750913-project-timezone-json.ts │ │ │ │ │ ├── 1707356935078-deprecate-boolean-field.ts │ │ │ │ │ ├── 1707979877289-code-verification-try-count.ts │ │ │ │ │ ├── 1707979877290-change-field-format-name.ts │ │ │ │ │ ├── 1708666764079-webhook-and-event.ts │ │ │ │ │ ├── 1709172706829-add-webhook-in-history.ts │ │ │ │ │ ├── 1709803978757-scheduler-lock.ts │ │ │ │ │ ├── 1713716840764-deprecate-field-format.ts │ │ │ │ │ ├── 1720760282371-add-token-on-webhook.ts │ │ │ │ │ ├── 1725935382221-add-order-on-field.ts │ │ │ │ │ ├── 1728522901760-modify-scheduler-lock-enum.ts │ │ │ │ │ ├── 1732588643312-delete-unused-tenant-columns.ts │ │ │ │ │ ├── 1737437203196-create-category-table.ts │ │ │ │ │ └── 1746153314386-add-search-max-days-on-channel.ts │ │ │ │ │ ├── typeorm-config.datasource.ts │ │ │ │ │ ├── typeorm-config.module.ts │ │ │ │ │ └── typeorm-config.service.ts │ │ │ ├── mysql.config.ts │ │ │ ├── opensearch.config.ts │ │ │ └── smtp.config.ts │ │ ├── constants │ │ │ └── error-code.enum.ts │ │ ├── domains │ │ │ ├── admin │ │ │ │ ├── auth │ │ │ │ │ ├── auth.controller.spec.ts │ │ │ │ │ ├── auth.controller.ts │ │ │ │ │ ├── auth.module.ts │ │ │ │ │ ├── auth.service.spec.ts │ │ │ │ │ ├── auth.service.ts │ │ │ │ │ ├── dtos │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── jwt.dto.ts │ │ │ │ │ │ ├── requests │ │ │ │ │ │ │ ├── email-user-sign-in-request.dto.ts │ │ │ │ │ │ │ ├── email-user-sign-up-request.dto.ts │ │ │ │ │ │ │ ├── email-verification-code-request.dto.ts │ │ │ │ │ │ │ ├── email-verification-mailing-request.dto.ts │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── invitation-user-sign-up-request.dto.ts │ │ │ │ │ │ │ └── oauth-user-sign-up-request.dto.ts │ │ │ │ │ │ ├── responses │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── oauth-login-url.response.dto.ts │ │ │ │ │ │ │ ├── send-email-code-response.dto.ts │ │ │ │ │ │ │ └── sign-in-response.dto.ts │ │ │ │ │ │ ├── send-email-code.dto.ts │ │ │ │ │ │ ├── sign-up-email-user.dto.ts │ │ │ │ │ │ ├── sign-up-invitation-user.dto.ts │ │ │ │ │ │ ├── sign-up-oauth-user.dto.ts │ │ │ │ │ │ ├── validate-email-user.dto.ts │ │ │ │ │ │ └── verify-email-code.dto.ts │ │ │ │ │ ├── exceptions │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── password-not.match.exception.ts │ │ │ │ │ │ └── user-blocked.exception.ts │ │ │ │ │ ├── guards │ │ │ │ │ │ ├── api-key.guard.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── jwt-auth.guard.ts │ │ │ │ │ │ ├── use-email.guard.ts │ │ │ │ │ │ └── use-oauth.guard.ts │ │ │ │ │ └── strategies │ │ │ │ │ │ ├── jwt.strategy.ts │ │ │ │ │ │ └── local.strategy.ts │ │ │ │ ├── channel │ │ │ │ │ ├── channel │ │ │ │ │ │ ├── channel.controller.spec.ts │ │ │ │ │ │ ├── channel.controller.ts │ │ │ │ │ │ ├── channel.entity.ts │ │ │ │ │ │ ├── channel.module.ts │ │ │ │ │ │ ├── channel.mysql.service.ts │ │ │ │ │ │ ├── channel.service.spec.ts │ │ │ │ │ │ ├── channel.service.ts │ │ │ │ │ │ ├── dtos │ │ │ │ │ │ │ ├── create-channel.dto.ts │ │ │ │ │ │ │ ├── find-all-channels-by-project-id.dto.ts │ │ │ │ │ │ │ ├── find-by-channel-id.dto.ts │ │ │ │ │ │ │ ├── find-one-by-name-and-project-id.dto.ts │ │ │ │ │ │ │ ├── image-config.dto.ts │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── requests │ │ │ │ │ │ │ │ ├── create-channel-request.dto.ts │ │ │ │ │ │ │ │ ├── find-channels-by-project-id-request.dto.ts │ │ │ │ │ │ │ │ ├── image-config-request.dto.ts │ │ │ │ │ │ │ │ ├── image-upload-url-test-request.dto.ts │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ ├── update-channel-fields-request.dto.ts │ │ │ │ │ │ │ │ └── update-channel-request.dto.ts │ │ │ │ │ │ │ ├── responses │ │ │ │ │ │ │ │ ├── create-channel-response.dto.ts │ │ │ │ │ │ │ │ ├── find-channel-by-id-response.dto.ts │ │ │ │ │ │ │ │ ├── find-channels-by-id-response.dto.ts │ │ │ │ │ │ │ │ ├── image-config-response.dto.ts │ │ │ │ │ │ │ │ ├── image-upload-url-test-response.dto.ts │ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ │ ├── update-channel-fields.dto.ts │ │ │ │ │ │ │ └── update-channel.dto.ts │ │ │ │ │ │ └── exceptions │ │ │ │ │ │ │ ├── channel-already-exists.exception.ts │ │ │ │ │ │ │ ├── channel-invalid-name.exception.ts │ │ │ │ │ │ │ ├── channel-not-found.exception.ts │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── field │ │ │ │ │ │ ├── dtos │ │ │ │ │ │ │ ├── create-field.dto.ts │ │ │ │ │ │ │ ├── create-many-fields.dto.ts │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── replace-field.dto.ts │ │ │ │ │ │ │ ├── replace-many-fields.dto.ts │ │ │ │ │ │ │ └── responses │ │ │ │ │ │ │ │ ├── find-fields-response.dto.ts │ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── exceptions │ │ │ │ │ │ │ ├── field-key-duplicated.exception.ts │ │ │ │ │ │ │ ├── field-name-duplicated.exception.ts │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── field.constants.ts │ │ │ │ │ │ ├── field.entity.ts │ │ │ │ │ │ ├── field.module.ts │ │ │ │ │ │ ├── field.mysql.service.ts │ │ │ │ │ │ ├── field.service.spec.ts │ │ │ │ │ │ └── field.service.ts │ │ │ │ │ └── option │ │ │ │ │ │ ├── dtos │ │ │ │ │ │ ├── create-many-options.dto.ts │ │ │ │ │ │ ├── create-option.dto.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── replace-select-options.dto.ts │ │ │ │ │ │ ├── requests │ │ │ │ │ │ │ ├── create-option-request.dto.ts │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ └── responses │ │ │ │ │ │ │ ├── create-option-response.dto.ts │ │ │ │ │ │ │ ├── find-option-by-field-id-response.dto.ts │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── exceptions │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── option-key-duplicated.exception.ts │ │ │ │ │ │ └── option-name-duplicated.exception.ts │ │ │ │ │ │ ├── option.controller.spec.ts │ │ │ │ │ │ ├── option.controller.ts │ │ │ │ │ │ ├── option.entity.ts │ │ │ │ │ │ ├── option.module.ts │ │ │ │ │ │ ├── option.service.spec.ts │ │ │ │ │ │ └── option.service.ts │ │ │ │ ├── feedback │ │ │ │ │ ├── dtos │ │ │ │ │ │ ├── add-issue.dto.ts │ │ │ │ │ │ ├── count-by-project-id.dto.ts │ │ │ │ │ │ ├── create-feedback.dto.ts │ │ │ │ │ │ ├── create-image-upload-url.dto.ts │ │ │ │ │ │ ├── delete-by-ids.dto.ts │ │ │ │ │ │ ├── find-feedbacks-by-channel-id-v2.dto.ts │ │ │ │ │ │ ├── find-feedbacks-by-channel-id.dto.ts │ │ │ │ │ │ ├── generate-excel.dto.ts │ │ │ │ │ │ ├── image-upload-url-test.dto.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── os-query.dto.ts │ │ │ │ │ │ ├── remove-issue.dto.ts │ │ │ │ │ │ ├── requests │ │ │ │ │ │ │ ├── delete-feedbacks-request.dto.ts │ │ │ │ │ │ │ ├── export-feedbacks-request.dto.ts │ │ │ │ │ │ │ ├── find-feedbacks-by-channel-id-request-v2.dto.ts │ │ │ │ │ │ │ ├── find-feedbacks-by-channel-id-request.dto.ts │ │ │ │ │ │ │ ├── get-feedbacks-by-channel-id-request.dto.ts │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── responses │ │ │ │ │ │ │ ├── add-issue-response.dto.ts │ │ │ │ │ │ │ ├── find-feedbacks-by-channel-id-response.dto.ts │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── scroll-feedbacks-v2.dto.ts │ │ │ │ │ │ ├── scroll-feedbacks.dto.ts │ │ │ │ │ │ └── upsert-feedback-item.dto.ts │ │ │ │ │ ├── feedback.common.ts │ │ │ │ │ ├── feedback.controller.spec.ts │ │ │ │ │ ├── feedback.controller.ts │ │ │ │ │ ├── feedback.entity.ts │ │ │ │ │ ├── feedback.module.ts │ │ │ │ │ ├── feedback.mysql.service.ts │ │ │ │ │ ├── feedback.os.service.ts │ │ │ │ │ ├── feedback.service.spec.ts │ │ │ │ │ └── feedback.service.ts │ │ │ │ ├── history │ │ │ │ │ ├── create-history.dto.ts │ │ │ │ │ ├── history-action.enum.ts │ │ │ │ │ ├── history-entity.enum.ts │ │ │ │ │ ├── history.entity.ts │ │ │ │ │ ├── history.module.ts │ │ │ │ │ ├── history.service.ts │ │ │ │ │ └── subscribers │ │ │ │ │ │ ├── abstract-history.subscriber.ts │ │ │ │ │ │ ├── api-key-history.subscriber.ts │ │ │ │ │ │ ├── channel-history.subscriber.ts │ │ │ │ │ │ ├── code-history.subscriber.ts │ │ │ │ │ │ ├── feedback-history.subscriber.ts │ │ │ │ │ │ ├── feedback-issue-history.subscriber.ts │ │ │ │ │ │ ├── field-history.subscriber.ts │ │ │ │ │ │ ├── issue-history.subscriber.ts │ │ │ │ │ │ ├── issue-tracker-history.subscriber.ts │ │ │ │ │ │ ├── member-history.subscriber.ts │ │ │ │ │ │ ├── option-history.subscriber.ts │ │ │ │ │ │ ├── project-history.subscriber.ts │ │ │ │ │ │ ├── role-history.subscriber.ts │ │ │ │ │ │ ├── tenant-history.subscriber.ts │ │ │ │ │ │ ├── user-history.subscriber.ts │ │ │ │ │ │ └── webhook-history.subscriber.ts │ │ │ │ ├── project │ │ │ │ │ ├── api-key │ │ │ │ │ │ ├── api-key.controller.spec.ts │ │ │ │ │ │ ├── api-key.controller.ts │ │ │ │ │ │ ├── api-key.entity.ts │ │ │ │ │ │ ├── api-key.module.ts │ │ │ │ │ │ ├── api-key.service.spec.ts │ │ │ │ │ │ ├── api-key.service.ts │ │ │ │ │ │ └── dtos │ │ │ │ │ │ │ ├── create-api-key.dto.ts │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── requests │ │ │ │ │ │ │ ├── create-api-key-request.dto.ts │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ │ └── responses │ │ │ │ │ │ │ ├── create-api-key-response.dto.ts │ │ │ │ │ │ │ ├── find-api-keys-response.dto.ts │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── category │ │ │ │ │ │ ├── category.controller.ts │ │ │ │ │ │ ├── category.entity.ts │ │ │ │ │ │ ├── category.module.ts │ │ │ │ │ │ ├── category.service.ts │ │ │ │ │ │ ├── dtos │ │ │ │ │ │ │ ├── create-category.dto.ts │ │ │ │ │ │ │ ├── find-all-categories-by-project-id.dto.ts │ │ │ │ │ │ │ ├── find-by-category-id.dto.ts │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── requests │ │ │ │ │ │ │ │ ├── create-category-request.dto.ts │ │ │ │ │ │ │ │ ├── get-all-categories-request.dto.ts │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── update-category-request.dto.ts │ │ │ │ │ │ │ ├── responses │ │ │ │ │ │ │ │ ├── create-category-response.dto.ts │ │ │ │ │ │ │ │ ├── get-all-categories-response.dto.ts │ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ │ └── update-category.dto.ts │ │ │ │ │ │ └── exceptions │ │ │ │ │ │ │ ├── category-name-duplicated.exception.ts │ │ │ │ │ │ │ ├── category-name-invalid.exception.ts │ │ │ │ │ │ │ ├── category-not-found.exception.ts │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── issue-tracker │ │ │ │ │ │ ├── dtos │ │ │ │ │ │ │ ├── create-issue-tracker.dto.ts │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── issue-tracker-data.dto.ts │ │ │ │ │ │ │ ├── requests │ │ │ │ │ │ │ │ ├── create-issue-tracker-request.dto.ts │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── update-issue-tracker-request.dto.ts │ │ │ │ │ │ │ ├── responses │ │ │ │ │ │ │ │ ├── create-issue-tracker-response.dto.ts │ │ │ │ │ │ │ │ ├── find-issue-tracker-response.dto.ts │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── update-issue-tracker-response.dto.ts │ │ │ │ │ │ │ └── update-issue-tracker.dto.ts │ │ │ │ │ │ ├── issue-tracker.controller.spec.ts │ │ │ │ │ │ ├── issue-tracker.controller.ts │ │ │ │ │ │ ├── issue-tracker.entity.ts │ │ │ │ │ │ ├── issue-tracker.module.ts │ │ │ │ │ │ ├── issue-tracker.service.spec.ts │ │ │ │ │ │ └── issue-tracker.service.ts │ │ │ │ │ ├── issue │ │ │ │ │ │ ├── dtos │ │ │ │ │ │ │ ├── create-issue.dto.ts │ │ │ │ │ │ │ ├── find-by-issue-id.dto.ts │ │ │ │ │ │ │ ├── find-feedbacks-by-issue-id.dto.ts │ │ │ │ │ │ │ ├── find-issues-by-project-id-v2.dto.ts │ │ │ │ │ │ │ ├── find-issues-by-project-id.dto.ts │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── requests │ │ │ │ │ │ │ │ ├── create-issue-request.dto.ts │ │ │ │ │ │ │ │ ├── delete-issues-request.dto.ts │ │ │ │ │ │ │ │ ├── find-issues-by-project-id-request-v2.dto.ts │ │ │ │ │ │ │ │ ├── find-issues-by-project-id-request.dto.ts │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── update-issue-request.dto.ts │ │ │ │ │ │ │ ├── responses │ │ │ │ │ │ │ │ ├── create-issue-response.dto.ts │ │ │ │ │ │ │ │ ├── find-issue-by-id-response.dto.ts │ │ │ │ │ │ │ │ ├── find-issues-by-project-id-response.dto.ts │ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ │ ├── update-issue-category.dto.ts │ │ │ │ │ │ │ └── update-issue.dto.ts │ │ │ │ │ │ ├── exceptions │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── issue-invalid-name.exception.ts │ │ │ │ │ │ │ ├── issue-name-duplicated.exception.ts │ │ │ │ │ │ │ └── issue-not-found.exception.ts │ │ │ │ │ │ ├── issue.controller.spec.ts │ │ │ │ │ │ ├── issue.controller.ts │ │ │ │ │ │ ├── issue.entity.ts │ │ │ │ │ │ ├── issue.module.ts │ │ │ │ │ │ ├── issue.service.spec.ts │ │ │ │ │ │ └── issue.service.ts │ │ │ │ │ ├── member │ │ │ │ │ │ ├── dtos │ │ │ │ │ │ │ ├── create-member.dto.ts │ │ │ │ │ │ │ ├── find-all-members.dto.ts │ │ │ │ │ │ │ ├── find-by-project-id.dto.ts │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── requests │ │ │ │ │ │ │ │ ├── create-member-request.dto.ts │ │ │ │ │ │ │ │ ├── delete-many-member-request.dto.ts │ │ │ │ │ │ │ │ ├── get-all-member-request.dto.ts │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── update-member-request.dto.ts │ │ │ │ │ │ │ ├── responses │ │ │ │ │ │ │ │ ├── get-all-members.dto.ts │ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ │ └── update-member.dto.ts │ │ │ │ │ │ ├── exceptions │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── member-already-exists.exception.ts │ │ │ │ │ │ │ ├── member-invalid-user.exception.ts │ │ │ │ │ │ │ ├── member-not-found.exception.ts │ │ │ │ │ │ │ └── member-update-role-not-matched-project.exception.ts │ │ │ │ │ │ ├── member.controller.ts │ │ │ │ │ │ ├── member.entity.ts │ │ │ │ │ │ ├── member.module.ts │ │ │ │ │ │ ├── member.service.spec.ts │ │ │ │ │ │ └── member.service.ts │ │ │ │ │ ├── project │ │ │ │ │ │ ├── dtos │ │ │ │ │ │ │ ├── create-project.dto.ts │ │ │ │ │ │ │ ├── find-all-projects.dto.ts │ │ │ │ │ │ │ ├── find-by-project-id.dto.ts │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── requests │ │ │ │ │ │ │ │ ├── create-project-request.dto.ts │ │ │ │ │ │ │ │ ├── find-projects-request.dto.ts │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── update-project-request.dto.ts │ │ │ │ │ │ │ ├── responses │ │ │ │ │ │ │ │ ├── count-feedbacks-by-id-response.dto.ts │ │ │ │ │ │ │ │ ├── count-issues-by-id-response.dto.ts │ │ │ │ │ │ │ │ ├── create-project-response.dto.ts │ │ │ │ │ │ │ │ ├── find-project-by-id-response.dto.ts │ │ │ │ │ │ │ │ ├── find-projects-response.dto.ts │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── update-project-response.dto.ts │ │ │ │ │ │ │ └── update-project.dto.ts │ │ │ │ │ │ ├── exceptions │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── project-already-exists.exception.ts │ │ │ │ │ │ │ ├── project-invalid-name.exception.ts │ │ │ │ │ │ │ └── project-not-found.exception.ts │ │ │ │ │ │ ├── project.controller.spec.ts │ │ │ │ │ │ ├── project.controller.ts │ │ │ │ │ │ ├── project.entity.ts │ │ │ │ │ │ ├── project.module.ts │ │ │ │ │ │ ├── project.service.spec.ts │ │ │ │ │ │ └── project.service.ts │ │ │ │ │ ├── role │ │ │ │ │ │ ├── dtos │ │ │ │ │ │ │ ├── create-role.dto.ts │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── requests │ │ │ │ │ │ │ │ ├── create-role-request.dto.ts │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── update-role-request.dto.ts │ │ │ │ │ │ │ ├── responses │ │ │ │ │ │ │ │ ├── get-all-roles-response.dto.ts │ │ │ │ │ │ │ │ ├── get-role-by-id-response.dto.ts │ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ │ └── update-role.dto.ts │ │ │ │ │ │ ├── exceptions │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── owner-role-is-immutable.exception.ts │ │ │ │ │ │ │ ├── role-already-exists.exception.ts │ │ │ │ │ │ │ └── role-not-found.exception.ts │ │ │ │ │ │ ├── permission.enum.ts │ │ │ │ │ │ ├── permission.guard.ts │ │ │ │ │ │ ├── require-permission.decorator.ts │ │ │ │ │ │ ├── role.controller.spec.ts │ │ │ │ │ │ ├── role.controller.ts │ │ │ │ │ │ ├── role.entity.ts │ │ │ │ │ │ ├── role.module.ts │ │ │ │ │ │ ├── role.service.spec.ts │ │ │ │ │ │ └── role.service.ts │ │ │ │ │ └── webhook │ │ │ │ │ │ ├── dtos │ │ │ │ │ │ ├── create-webhook.dto.ts │ │ │ │ │ │ ├── event.dto.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── requests │ │ │ │ │ │ │ ├── create-webhook-request.dto.ts │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── update-webhook-request.dto.ts │ │ │ │ │ │ ├── responses │ │ │ │ │ │ │ ├── create-webhook-response.dto.ts │ │ │ │ │ │ │ ├── get-webhook-by-id-response.dto.ts │ │ │ │ │ │ │ ├── get-webhooks-by-project-id-response.dto.ts │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── update-webhook-response.dto.ts │ │ │ │ │ │ └── update-webhook.dto.ts │ │ │ │ │ │ ├── event.entity.ts │ │ │ │ │ │ ├── exceptions │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── webhook-already-exists.exception.ts │ │ │ │ │ │ ├── webhook.controller.ts │ │ │ │ │ │ ├── webhook.entity.ts │ │ │ │ │ │ ├── webhook.listener.spec.ts │ │ │ │ │ │ ├── webhook.listener.ts │ │ │ │ │ │ ├── webhook.module.ts │ │ │ │ │ │ ├── webhook.service.spec.ts │ │ │ │ │ │ └── webhook.service.ts │ │ │ │ ├── statistics │ │ │ │ │ ├── feedback-issue │ │ │ │ │ │ ├── dtos │ │ │ │ │ │ │ ├── get-count-by-date-by-issue.dto.ts │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── responses │ │ │ │ │ │ │ │ ├── find-count-by-date-by-issue-response.dto.ts │ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ │ └── update-count.dto.ts │ │ │ │ │ │ ├── feedback-issue-statistics.controller.spec.ts │ │ │ │ │ │ ├── feedback-issue-statistics.controller.ts │ │ │ │ │ │ ├── feedback-issue-statistics.entity.ts │ │ │ │ │ │ ├── feedback-issue-statistics.module.ts │ │ │ │ │ │ ├── feedback-issue-statistics.service.spec.ts │ │ │ │ │ │ └── feedback-issue-statistics.service.ts │ │ │ │ │ ├── feedback │ │ │ │ │ │ ├── dtos │ │ │ │ │ │ │ ├── get-count-by-date-by-channel.dto.ts │ │ │ │ │ │ │ ├── get-count.dto.ts │ │ │ │ │ │ │ ├── get-issued-rate.dto.ts │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── responses │ │ │ │ │ │ │ │ ├── find-count-by-date-by-channel-response.dto.ts │ │ │ │ │ │ │ │ ├── find-count-response.dto.ts │ │ │ │ │ │ │ │ ├── find-issued-rate.dto.ts │ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ │ └── update-count.dto.ts │ │ │ │ │ │ ├── feedback-statistics.controller.spec.ts │ │ │ │ │ │ ├── feedback-statistics.controller.ts │ │ │ │ │ │ ├── feedback-statistics.entity.ts │ │ │ │ │ │ ├── feedback-statistics.module.ts │ │ │ │ │ │ ├── feedback-statistics.service.spec.ts │ │ │ │ │ │ └── feedback-statistics.service.ts │ │ │ │ │ ├── issue │ │ │ │ │ │ ├── dtos │ │ │ │ │ │ │ ├── get-count-by-date-by-channel.dto.ts │ │ │ │ │ │ │ ├── get-count-by-status.dto.ts │ │ │ │ │ │ │ ├── get-count.dto.ts │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── responses │ │ │ │ │ │ │ │ ├── find-count-by-date-response.dto.ts │ │ │ │ │ │ │ │ ├── find-count-by-status-response.dto.ts │ │ │ │ │ │ │ │ ├── find-count-response.dto.ts │ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ │ └── update-count.dto.ts │ │ │ │ │ │ ├── issue-statistics.controller.spec.ts │ │ │ │ │ │ ├── issue-statistics.controller.ts │ │ │ │ │ │ ├── issue-statistics.entity.ts │ │ │ │ │ │ ├── issue-statistics.module.ts │ │ │ │ │ │ ├── issue-statistics.service.spec.ts │ │ │ │ │ │ └── issue-statistics.service.ts │ │ │ │ │ └── utils │ │ │ │ │ │ └── util-functions.ts │ │ │ │ ├── tenant │ │ │ │ │ ├── dtos │ │ │ │ │ │ ├── feedback-count-by-tenant-id.dto.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── requests │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── setup-tenant-request.dto.ts │ │ │ │ │ │ │ └── update-tenant-request.dto.ts │ │ │ │ │ │ ├── responses │ │ │ │ │ │ │ ├── count-feedbacks-by-id-response.dto.ts │ │ │ │ │ │ │ ├── get-tenant-response.dto.ts │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── setup-tenant.dto.ts │ │ │ │ │ │ └── update-tenant.dto.ts │ │ │ │ │ ├── entities │ │ │ │ │ │ └── enums │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── login-button-type.enum.ts │ │ │ │ │ ├── exceptions │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── tenant-already-exists.exception.ts │ │ │ │ │ │ └── tenant-not-found.exception.ts │ │ │ │ │ ├── tenant.controller.ts │ │ │ │ │ ├── tenant.entity.ts │ │ │ │ │ ├── tenant.module.ts │ │ │ │ │ ├── tenant.service.spec.ts │ │ │ │ │ └── tenant.service.ts │ │ │ │ └── user │ │ │ │ │ ├── create-user.service.spec.ts │ │ │ │ │ ├── create-user.service.ts │ │ │ │ │ ├── decorators │ │ │ │ │ ├── current-user.decorator.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── is-nullable.decorator.ts │ │ │ │ │ ├── dtos │ │ │ │ │ ├── change-password.dto.ts │ │ │ │ │ ├── create-email-user.dto.ts │ │ │ │ │ ├── create-invitation-user.dto.ts │ │ │ │ │ ├── create-oauth-user.dto.ts │ │ │ │ │ ├── create-user.dto.ts │ │ │ │ │ ├── find-all-users.dto.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── invite-user.dto.ts │ │ │ │ │ ├── requests │ │ │ │ │ │ ├── change-password-request.dto.ts │ │ │ │ │ │ ├── delete-users-request.dto.ts │ │ │ │ │ │ ├── get-all-users-request.dto.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── reset-password-mailing-request.dto.ts │ │ │ │ │ │ ├── reset-password-request.dto.ts │ │ │ │ │ │ ├── update-user-request.dto.ts │ │ │ │ │ │ └── user-invitation-request.dto.ts │ │ │ │ │ ├── reset-password.dto.ts │ │ │ │ │ ├── responses │ │ │ │ │ │ ├── get-all-user-response.dto.ts │ │ │ │ │ │ ├── get-roles-by-id.response.dto.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── update-user.dto.ts │ │ │ │ │ └── user.dto.ts │ │ │ │ │ ├── entities │ │ │ │ │ ├── enums │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── sign-up-method.enum.ts │ │ │ │ │ │ ├── user-state.enum.ts │ │ │ │ │ │ └── user-type.enum.ts │ │ │ │ │ └── user.entity.ts │ │ │ │ │ ├── exceptions │ │ │ │ │ ├── email-not-verified.exception.ts │ │ │ │ │ ├── email-verification.exception.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── invalid-code.exception.ts │ │ │ │ │ ├── invalid-password.exception.ts │ │ │ │ │ ├── not-allowed-domain.exception.ts │ │ │ │ │ ├── not-allowed-user-create.exception.ts │ │ │ │ │ ├── user-already-exists.exception.ts │ │ │ │ │ └── user-not-found.exception.ts │ │ │ │ │ ├── super-user.decorator.ts │ │ │ │ │ ├── super-user.guard.ts │ │ │ │ │ ├── user-password.service.spec.ts │ │ │ │ │ ├── user-password.service.ts │ │ │ │ │ ├── user.controller.spec.ts │ │ │ │ │ ├── user.controller.ts │ │ │ │ │ ├── user.module.ts │ │ │ │ │ ├── user.service.spec.ts │ │ │ │ │ └── user.service.ts │ │ │ ├── api │ │ │ │ ├── api.controller.ts │ │ │ │ ├── api.module.ts │ │ │ │ ├── category.controller.ts │ │ │ │ ├── channel.controller.ts │ │ │ │ ├── feedback.controller.ts │ │ │ │ ├── issue.controller.ts │ │ │ │ ├── project.controller.ts │ │ │ │ └── v2 │ │ │ │ │ └── feedback.controller.ts │ │ │ └── operation │ │ │ │ ├── health │ │ │ │ ├── health.controller.ts │ │ │ │ └── health.module.ts │ │ │ │ ├── migration │ │ │ │ ├── migration.controller.ts │ │ │ │ ├── migration.module.ts │ │ │ │ └── migration.service.ts │ │ │ │ └── scheduler-lock │ │ │ │ ├── lock-type.enum.ts │ │ │ │ ├── scheduler-lock.entity.ts │ │ │ │ ├── scheduler-lock.module.ts │ │ │ │ └── scheduler-lock.service.ts │ │ ├── main.ts │ │ ├── scripts │ │ │ └── build-swagger-docs.ts │ │ ├── shared │ │ │ ├── code │ │ │ │ ├── code-type.enum.ts │ │ │ │ ├── code.entity.ts │ │ │ │ ├── code.module.ts │ │ │ │ ├── code.service.spec.ts │ │ │ │ ├── code.service.ts │ │ │ │ └── dtos │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── set-code-verified.dto.ts │ │ │ │ │ └── set-code.dto.ts │ │ │ └── mailing │ │ │ │ ├── email-verification-mailing.service.spec.ts │ │ │ │ ├── email-verification-mailing.service.ts │ │ │ │ ├── exceptions │ │ │ │ ├── index.ts │ │ │ │ ├── invalid-email-code.exception.ts │ │ │ │ └── not-verified-email.exception.ts │ │ │ │ ├── mailing.module.ts │ │ │ │ ├── reset-password-mailing.service.spec.ts │ │ │ │ ├── reset-password-mailing.service.ts │ │ │ │ ├── send-mail.dto.ts │ │ │ │ ├── user-invitation-mailing.service.spec.ts │ │ │ │ └── user-invitation-mailing.service.ts │ │ ├── test-utils │ │ │ ├── fixtures.ts │ │ │ ├── providers │ │ │ │ ├── api-key.service.providers.ts │ │ │ │ ├── auth.service.providers.ts │ │ │ │ ├── channel.service.providers.ts │ │ │ │ ├── code.service.providers.ts │ │ │ │ ├── create-user.service.providers.ts │ │ │ │ ├── feedback-issue-statistics.service.providers.ts │ │ │ │ ├── feedback-statistics.service.providers.ts │ │ │ │ ├── feedback.service.providers.ts │ │ │ │ ├── field.service.providers.ts │ │ │ │ ├── issue-statistics.service.providers.ts │ │ │ │ ├── issue-tracker.service.provider.ts │ │ │ │ ├── issue.service.providers.ts │ │ │ │ ├── member.service.providers.ts │ │ │ │ ├── option.service.providers.ts │ │ │ │ ├── project.service.providers.ts │ │ │ │ ├── role.service.providers.ts │ │ │ │ ├── scheduler-lock.service.providers.ts │ │ │ │ ├── tenant.service.providers.ts │ │ │ │ ├── user-password.service.providers.ts │ │ │ │ ├── user.service.providers.ts │ │ │ │ ├── webhook.listener.provider.ts │ │ │ │ └── webhook.service.provider.ts │ │ │ ├── stubs │ │ │ │ ├── api-key-repository.stub.ts │ │ │ │ ├── channel-repository.stub.ts │ │ │ │ ├── code-repository.stub.ts │ │ │ │ ├── common-repository.stub.ts │ │ │ │ ├── event-repository.stub.ts │ │ │ │ ├── feedback-repository.stub.ts │ │ │ │ ├── field-repository.stub.ts │ │ │ │ ├── index.ts │ │ │ │ ├── issue-repository.stub.ts │ │ │ │ ├── issue-tracker-repository.stub.ts │ │ │ │ ├── member-repository.stub.ts │ │ │ │ ├── option-repository.stub.ts │ │ │ │ ├── project-repository.stub.ts │ │ │ │ ├── role-repository.stub.ts │ │ │ │ ├── tenant-repository.stub.ts │ │ │ │ ├── user-repository.stub.ts │ │ │ │ └── webhook-repository.stub.ts │ │ │ └── util-functions.ts │ │ ├── types │ │ │ ├── cls-service.type.ts │ │ │ ├── config-service.type.ts │ │ │ └── http-status.ts │ │ └── utils │ │ │ ├── date-utils.ts │ │ │ ├── escape-string-regexp.ts │ │ │ └── validate-unique.ts │ ├── test │ │ ├── auth.e2e-spec.ts │ │ ├── feedback │ │ │ ├── channel.e2e-spec.ts │ │ │ ├── feedback.e2e-spec.ts │ │ │ └── project.e2e-spec.ts │ │ ├── jest-e2e.json │ │ ├── role.e2e-spec.ts │ │ ├── tenant.e2e-spec.ts │ │ └── user.e2e-spec.ts │ ├── tsconfig.build.json │ └── tsconfig.json ├── cli │ ├── README.md │ ├── bin │ │ └── auf-cli.ts │ ├── config.toml │ ├── docker-compose.infra-amd64.yml │ ├── docker-compose.infra-arm64.yml │ ├── docker-compose.template.yml │ ├── eslint.config.js │ ├── package.json │ └── tsconfig.json ├── e2e │ ├── database-utils.ts │ ├── global.setup.ts │ ├── global.teardown.ts │ ├── package.json │ ├── playwright.config.ts │ ├── scenarios │ │ ├── no-database-seed │ │ │ └── create-project.spec.ts │ │ └── with-database-seed │ │ │ ├── create-channel.spec.ts │ │ │ └── create-feedback.spec.ts │ └── test.list.ts └── web │ ├── .env.build │ ├── .env.example │ ├── .prettierignore │ ├── README.md │ ├── entrypoint.sh │ ├── eslint.config.js │ ├── jest.config.ts │ ├── jest.setup.ts │ ├── next-env.d.ts │ ├── next-i18next.config.js │ ├── next.config.js │ ├── package.json │ ├── postcss.config.js │ ├── public │ ├── assets │ │ ├── images │ │ │ ├── 403.svg │ │ │ ├── 404.svg │ │ │ ├── api-key-help.svg │ │ │ ├── channel-make.svg │ │ │ ├── complete-tenant-setting.svg │ │ │ ├── create-channel-channel-info.svg │ │ │ ├── create-channel-field-preview.svg │ │ │ ├── create-channel-field.svg │ │ │ ├── create-complete.svg │ │ │ ├── create-project-step-1.svg │ │ │ ├── create-project-step-2.svg │ │ │ ├── create-project-step-3.svg │ │ │ ├── empty-image.png │ │ │ ├── google.svg │ │ │ ├── image-setting-help.png │ │ │ ├── logo-horizontal.svg │ │ │ ├── logo.png │ │ │ ├── logo.svg │ │ │ ├── no-data-with-search.svg │ │ │ ├── no-data.svg │ │ │ ├── no-projects-in-profile-page.svg │ │ │ ├── no-projects-in-project-creation-page.svg │ │ │ ├── no-projects-in-project-creation │ │ │ │ ├── step1.svg │ │ │ │ ├── step2.svg │ │ │ │ └── step3.svg │ │ │ ├── reset-password.svg │ │ │ ├── sample_image.png │ │ │ ├── sample_image1.png │ │ │ ├── send-reset-password-email.svg │ │ │ ├── sign-in.svg │ │ │ ├── sign-up.svg │ │ │ ├── temp.png │ │ │ ├── tenant-setting.svg │ │ │ └── webhook-help.png │ │ └── mailing │ │ │ ├── email-code.png │ │ │ ├── email-reset.png │ │ │ ├── email-signup.png │ │ │ ├── github-mark.png │ │ │ ├── globe-fill.png │ │ │ ├── globe-fill.svg │ │ │ ├── logo.svg │ │ │ ├── mail-fill.png │ │ │ └── title-ufb.png │ └── locales │ │ ├── de │ │ └── common.json │ │ ├── en │ │ └── common.json │ │ ├── ja │ │ └── common.json │ │ ├── ko │ │ └── common.json │ │ └── zh │ │ └── common.json │ ├── src │ ├── entities │ │ ├── api-key │ │ │ ├── api-key-columns.tsx │ │ │ ├── api-key.schema.ts │ │ │ ├── api-key.type.ts │ │ │ ├── index.ts │ │ │ └── ui │ │ │ │ ├── api-key-form-dialog.ui.tsx │ │ │ │ ├── api-key-table.ui.tsx │ │ │ │ └── index.ts │ │ ├── category │ │ │ ├── category.schema.ts │ │ │ ├── category.type.ts │ │ │ ├── index.ts │ │ │ ├── lib │ │ │ │ ├── index.ts │ │ │ │ └── use-category-search-infinite.ts │ │ │ └── ui │ │ │ │ ├── category-combobox-edit-popover.ui.tsx │ │ │ │ ├── category-combobox.ui.tsx │ │ │ │ └── index.ts │ │ ├── channel │ │ │ ├── channel.schema.tsx │ │ │ ├── channel.type.ts │ │ │ ├── index.ts │ │ │ ├── lib │ │ │ │ ├── index.ts │ │ │ │ └── use-routing-channel-creation.tsx │ │ │ └── ui │ │ │ │ ├── channel-info-form.ui.tsx │ │ │ │ ├── image-config-form.ui.tsx │ │ │ │ └── index.ts │ │ ├── dashboard │ │ │ ├── index.ts │ │ │ ├── lib │ │ │ │ ├── index.ts │ │ │ │ └── use-line-chart-data.ts │ │ │ └── ui │ │ │ │ ├── create-feedback-per-issue-card.ui.tsx │ │ │ │ ├── feedback-line-chart.ui.tsx │ │ │ │ ├── index.ts │ │ │ │ ├── issue-bar-chart.ui.tsx │ │ │ │ ├── issue-feedback-line-chart.ui.tsx │ │ │ │ ├── issue-line-chart.ui.tsx │ │ │ │ ├── issue-rank.ui.tsx │ │ │ │ ├── seven-days-feedback-card.ui.tsx │ │ │ │ ├── seven-days-issue-card.ui.tsx │ │ │ │ ├── thirty-days-feedback-card.ui.tsx │ │ │ │ ├── thirty-days-issue-card.ui.tsx │ │ │ │ ├── today-feedback-card.ui.tsx │ │ │ │ ├── today-issue-card.ui.tsx │ │ │ │ ├── total-feedback-card.ui.tsx │ │ │ │ ├── total-issue-card.ui.tsx │ │ │ │ ├── yesterday-feedback-card.ui.tsx │ │ │ │ └── yesterday-issue-card.ui.tsx │ │ ├── feedback │ │ │ ├── feedback-table-columns.tsx │ │ │ ├── feedback.type.ts │ │ │ ├── index.ts │ │ │ ├── lib │ │ │ │ ├── index.ts │ │ │ │ ├── use-feedback-download.ts │ │ │ │ ├── use-feedback-query-converter.ts │ │ │ │ ├── use-feedback-search.ts │ │ │ │ └── use-preview-feedback.ts │ │ │ └── ui │ │ │ │ ├── feedback-cell.tsx │ │ │ │ ├── feedback-detail-cell.ui.tsx │ │ │ │ ├── feedback-detail-sheet.ui.tsx │ │ │ │ ├── feedback-table-channel-selection.ui.tsx │ │ │ │ ├── feedback-table-download.ui.tsx │ │ │ │ ├── feedback-table-expand.ui.tsx │ │ │ │ ├── feedback-table-view-options.ui.tsx │ │ │ │ ├── feedback-table.ui.tsx │ │ │ │ ├── index.ts │ │ │ │ ├── issue-cell-edit-combobox.ui.tsx │ │ │ │ └── issue-cell.tsx │ │ ├── field │ │ │ ├── field-columns.tsx │ │ │ ├── field-utils.ts │ │ │ ├── field.constant.ts │ │ │ ├── field.schema.ts │ │ │ ├── field.type.ts │ │ │ ├── index.ts │ │ │ └── ui │ │ │ │ ├── feedback-request-code-popover.ui.tsx │ │ │ │ ├── field-format-label.ui.tsx │ │ │ │ ├── field-setting-sheet.ui.tsx │ │ │ │ ├── field-table.ui.tsx │ │ │ │ ├── index.ts │ │ │ │ ├── option-list-popover.ui.tsx │ │ │ │ └── preview-field-table.ui.tsx │ │ ├── issue-tracker │ │ │ ├── index.ts │ │ │ ├── issue-tracker.schema.ts │ │ │ ├── issue-tracker.type.ts │ │ │ └── ui │ │ │ │ ├── index.ts │ │ │ │ └── issue-tracker-form.ui.tsx │ │ ├── issue │ │ │ ├── index.ts │ │ │ ├── issue.schema.ts │ │ │ ├── issue.type.ts │ │ │ ├── lib │ │ │ │ ├── index.ts │ │ │ │ ├── use-issue-search-infinite.ts │ │ │ │ └── use-issue-search.ts │ │ │ └── ui │ │ │ │ ├── index.ts │ │ │ │ ├── issue-badge.ui.tsx │ │ │ │ └── issue-select-box.ui.tsx │ │ ├── member │ │ │ ├── index.ts │ │ │ ├── lib │ │ │ │ ├── index.ts │ │ │ │ └── use-member-search.ts │ │ │ ├── member-columns.tsx │ │ │ ├── member.schema.ts │ │ │ ├── member.type.ts │ │ │ └── ui │ │ │ │ ├── index.ts │ │ │ │ ├── member-form-dialog.ui.tsx │ │ │ │ ├── member-name-cell.ui.tsx │ │ │ │ └── member-table.ui.tsx │ │ ├── project │ │ │ ├── index.ts │ │ │ ├── project.schema.tsx │ │ │ ├── project.type.ts │ │ │ ├── timezone.util.ts │ │ │ └── ui │ │ │ │ ├── index.ts │ │ │ │ ├── project-guard.ui.tsx │ │ │ │ ├── project-info-form.ui.tsx │ │ │ │ └── timezone-select-box.tsx │ │ ├── role │ │ │ ├── index.ts │ │ │ ├── input-role.model.ts │ │ │ ├── permission.type.ts │ │ │ ├── role.schema.ts │ │ │ ├── role.type.ts │ │ │ └── ui │ │ │ │ ├── index.ts │ │ │ │ ├── role-form-sheet.ui.tsx │ │ │ │ └── role-table.ui.tsx │ │ ├── tenant │ │ │ ├── index.ts │ │ │ ├── tenant.model.ts │ │ │ ├── tenant.schema.ts │ │ │ ├── tenant.type.ts │ │ │ └── ui │ │ │ │ ├── email-config-form.ui.tsx │ │ │ │ ├── index.ts │ │ │ │ ├── oauth-config-form.ui.tsx │ │ │ │ ├── tenant-guard.ui.tsx │ │ │ │ └── tenant-info-form.ui.tsx │ │ ├── user │ │ │ ├── index.ts │ │ │ ├── lib │ │ │ │ ├── index.ts │ │ │ │ └── use-user-search.ts │ │ │ ├── ui │ │ │ │ ├── change-password-form.ui.tsx │ │ │ │ ├── change-password-setting.ui.tsx │ │ │ │ ├── index.ts │ │ │ │ ├── invite-user-dialog.ui.tsx │ │ │ │ ├── invited-user-signup-form.ui.tsx │ │ │ │ ├── update-user-dialog.ui.tsx │ │ │ │ ├── user-management-table.ui.tsx │ │ │ │ ├── user-profile-form.ui.tsx │ │ │ │ └── user-profile-setting.ui.tsx │ │ │ ├── user-columns.tsx │ │ │ ├── user.model.ts │ │ │ ├── user.schema.ts │ │ │ └── user.type.ts │ │ └── webhook │ │ │ ├── index.ts │ │ │ ├── ui │ │ │ ├── index.ts │ │ │ ├── webhook-event-card.ui.tsx │ │ │ ├── webhook-event-cell.tsx │ │ │ ├── webhook-form-sheet.ui.tsx │ │ │ ├── webhook-switch.ui.tsx │ │ │ └── webhook-table.ui.tsx │ │ │ ├── webhook-column.tsx │ │ │ ├── webhook.schema.ts │ │ │ └── webhook.type.ts │ ├── env.ts │ ├── features │ │ ├── auth │ │ │ ├── reset-password-with-email │ │ │ │ ├── index.ts │ │ │ │ ├── request-reset-password-with-email.schema.ts │ │ │ │ ├── reset-password-with-email.schema.ts │ │ │ │ └── ui │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── request-reset-password-with-email.ui.tsx │ │ │ │ │ └── reset-password-with-email-form.ui.tsx │ │ │ ├── sign-in-with-oauth │ │ │ │ ├── index.ts │ │ │ │ ├── lib │ │ │ │ │ ├── index.ts │ │ │ │ │ └── use-oauth-callback.ts │ │ │ │ └── ui │ │ │ │ │ ├── index.ts │ │ │ │ │ └── sign-in-with-oauth-button.ui.tsx │ │ │ └── sign-up-with-email │ │ │ │ ├── index.ts │ │ │ │ ├── sign-up-with-email.schema.ts │ │ │ │ ├── sign-up-with-email.type.ts │ │ │ │ └── ui │ │ │ │ ├── index.ts │ │ │ │ └── sign-up-with-email-form.ui.tsx │ │ ├── create-channel │ │ │ ├── create-channel-model.ts │ │ │ ├── create-channel-type.tsx │ │ │ ├── create-channel.constant.tsx │ │ │ ├── index.ts │ │ │ └── ui │ │ │ │ ├── create-channel-input-template.ui.tsx │ │ │ │ ├── create-channel.ui.tsx │ │ │ │ ├── index.ts │ │ │ │ ├── input-channel-info-step.ui.tsx │ │ │ │ ├── input-field-preview-step.ui.tsx │ │ │ │ └── input-field-step.ui.tsx │ │ ├── create-project │ │ │ ├── create-project-model.ts │ │ │ ├── create-project-type.tsx │ │ │ ├── create-project.constant.tsx │ │ │ ├── index.ts │ │ │ └── ui │ │ │ │ ├── create-project-input-template.ui.tsx │ │ │ │ ├── create-project.ui.tsx │ │ │ │ ├── index.ts │ │ │ │ ├── input-api-key-step.ui.tsx │ │ │ │ ├── input-issue-tracker-step.ui.tsx │ │ │ │ ├── input-members-step.ui.tsx │ │ │ │ ├── input-project-info-step.ui.tsx │ │ │ │ └── input-roles-step.ui.tsx │ │ └── create-tenant │ │ │ ├── create-tenant-form.schema.ts │ │ │ ├── create-tenant-form.type.ts │ │ │ ├── create-tenant-form.ui.tsx │ │ │ ├── default-super-account.constant.ts │ │ │ └── index.ts │ ├── middleware.ts │ ├── pages │ │ ├── 403.tsx │ │ ├── 404.tsx │ │ ├── _app.tsx │ │ ├── _document.tsx │ │ ├── api │ │ │ └── health.ts │ │ ├── auth │ │ │ ├── oauth-callback.tsx │ │ │ ├── reset-password.tsx │ │ │ ├── sign-in.tsx │ │ │ └── sign-up.tsx │ │ ├── index.tsx │ │ ├── link │ │ │ ├── reset-password.tsx │ │ │ └── user-invitation.tsx │ │ ├── main │ │ │ ├── index.tsx │ │ │ ├── profile.tsx │ │ │ ├── project │ │ │ │ ├── [projectId] │ │ │ │ │ ├── channel │ │ │ │ │ │ ├── create-complete.tsx │ │ │ │ │ │ └── create.tsx │ │ │ │ │ ├── dashboard.tsx │ │ │ │ │ ├── feedback.tsx │ │ │ │ │ ├── issue.tsx │ │ │ │ │ ├── setting.tsx │ │ │ │ │ └── settings.tsx │ │ │ │ ├── create-complete.tsx │ │ │ │ └── create.tsx │ │ │ └── tenant.tsx │ │ └── tenant │ │ │ └── create.tsx │ ├── server-side-translations.ts │ ├── server │ │ ├── api-handler.ts │ │ └── logger.ts │ ├── shared │ │ ├── constants │ │ │ ├── chart-colors.ts │ │ │ ├── color-map.ts │ │ │ ├── date-format.ts │ │ │ ├── index.ts │ │ │ ├── issues.ts │ │ │ └── path.ts │ │ ├── index.ts │ │ ├── lib │ │ │ ├── client.ts │ │ │ ├── cookie-storage.ts │ │ │ ├── index.ts │ │ │ ├── use-all-channels.ts │ │ │ ├── use-all-projects.ts │ │ │ ├── use-permissions.ts │ │ │ ├── use-sort.ts │ │ │ ├── use-warn-if-saved-changes.tsx │ │ │ ├── use-warn-if-unsaved-changes.tsx │ │ │ ├── useOAIMutation.ts │ │ │ └── useOAIQuery.ts │ │ ├── styles │ │ │ └── global.css │ │ ├── types │ │ │ ├── api.type.ts │ │ │ ├── date-range.type.ts │ │ │ ├── entity-table.type.ts │ │ │ ├── fetch-error.type.ts │ │ │ ├── form-overlay-props.type.ts │ │ │ ├── i18n.d.ts │ │ │ ├── index.ts │ │ │ ├── jwt.type.ts │ │ │ ├── openapi.type.ts │ │ │ ├── page-with-layout.type.ts │ │ │ ├── search-query.type.ts │ │ │ └── svg.d.ts │ │ ├── ui │ │ │ ├── anonymous-template.ui.tsx │ │ │ ├── avatar.ui.tsx │ │ │ ├── category-table-row.ui.tsx │ │ │ ├── category-table.ui.tsx │ │ │ ├── charts │ │ │ │ ├── chart-card.tsx │ │ │ │ ├── index.ts │ │ │ │ ├── legend.tsx │ │ │ │ ├── simple-bar-chart.tsx │ │ │ │ ├── simple-line-chart.tsx │ │ │ │ └── simple-pie-chart.tsx │ │ │ ├── copy-icon-button.ui.tsx │ │ │ ├── create-input-template.ui.tsx │ │ │ ├── create-section-template.ui.tsx │ │ │ ├── creating-dialog.ui.tsx │ │ │ ├── creation │ │ │ │ ├── creation-header.ui.tsx │ │ │ │ ├── creation-layout.ui.tsx │ │ │ │ ├── creation-stepper.ui.tsx │ │ │ │ └── index.ts │ │ │ ├── dashboard-card.tsx │ │ │ ├── date-range-picker.tsx │ │ │ ├── delete-dialog.ui.tsx │ │ │ ├── description-tooltip.tsx │ │ │ ├── expandable-text.ui.tsx │ │ │ ├── form-dialog.ui.tsx │ │ │ ├── help-card-docs.tsx │ │ │ ├── image-preview-button.tsx │ │ │ ├── index.ts │ │ │ ├── infinite-scroll-area.ui.tsx │ │ │ ├── inputs │ │ │ │ ├── async-multi-select-search-input.ui.tsx │ │ │ │ ├── async-select-search-input.ui.tsx │ │ │ │ ├── combobox-input-box.ui.tsx │ │ │ │ ├── date-picker.ui.tsx │ │ │ │ ├── index.ts │ │ │ │ ├── multi-select-search-input.ui.tsx │ │ │ │ ├── select-input.ui.tsx │ │ │ │ ├── select-search-input.ui.tsx │ │ │ │ └── text-input.ui.tsx │ │ │ ├── language-select-box.ui.tsx │ │ │ ├── logo.ui.tsx │ │ │ ├── no-project-dialog-in-project-creation.ui.tsx │ │ │ ├── setting-alert.ui.tsx │ │ │ ├── setting-template.ui.tsx │ │ │ ├── sheet-detail-table.ui.tsx │ │ │ ├── side-menu-layout.ui.tsx │ │ │ ├── sorting-table-head.ui.tsx │ │ │ ├── table-filter-popover │ │ │ │ ├── index.ts │ │ │ │ ├── table-filter-popover-input.ui.tsx │ │ │ │ ├── table-filter-popover-select-condition.ui.tsx │ │ │ │ ├── table-filter-popover.type.ts │ │ │ │ └── table-filter-popover.ui.tsx │ │ │ ├── tables │ │ │ │ ├── basic-table.ui.tsx │ │ │ │ ├── dashboard-table.tsx │ │ │ │ ├── draggable-row.ui.tsx │ │ │ │ ├── index.ts │ │ │ │ ├── row-drag-handle-cell.ui.tsx │ │ │ │ ├── table-checkbox.tsx │ │ │ │ ├── table-faceted-filter.ui.tsx │ │ │ │ ├── table-loading-row.tsx │ │ │ │ ├── table-pagination.tsx │ │ │ │ └── table-resizer.tsx │ │ │ ├── theme-select-box.ui.tsx │ │ │ ├── warn-if-saved-changes-dialog.ui.tsx │ │ │ └── warn-if-unsaved-changes-dialog.ui.tsx │ │ └── utils │ │ │ ├── cn.ts │ │ │ ├── command-filter.ts │ │ │ ├── display-string.ts │ │ │ ├── empty-function.ts │ │ │ ├── first-letter-pascal.ts │ │ │ ├── get-day-count.ts │ │ │ ├── index.ts │ │ │ ├── is-object-equal.ts │ │ │ ├── parse-as-date-range.ts │ │ │ └── path-parsing.ts │ ├── test-utils.tsx │ └── widgets │ │ ├── anonymous-layout │ │ ├── index.ts │ │ └── ui │ │ │ ├── anonymous-layout.ui.tsx │ │ │ ├── header.ui.tsx │ │ │ └── index.ts │ │ ├── channel-settings │ │ ├── index.ts │ │ └── ui │ │ │ ├── channel-info-setting.ui.tsx │ │ │ ├── field-setting.ui.tsx │ │ │ ├── image-config-setting.ui.tsx │ │ │ └── index.ts │ │ ├── dashboard-card-list │ │ ├── index.ts │ │ └── ui │ │ │ ├── dashboard-card-list.ui.tsx │ │ │ └── index.ts │ │ ├── issue-table │ │ ├── index.ts │ │ ├── issue-table-columns.tsx │ │ ├── lib │ │ │ └── use-issue-query-converter.ts │ │ └── ui │ │ │ ├── index.ts │ │ │ ├── issue-detail-sheet.ui.tsx │ │ │ ├── issue-form-dialog.ui.tsx │ │ │ ├── issue-kanban-column-header.ui.tsx │ │ │ ├── issue-kanban-column-item.ui.tsx │ │ │ ├── issue-kanban-column-sorting.ui.tsx │ │ │ ├── issue-kanban-column.ui.tsx │ │ │ ├── issue-kanban-dnd-context.ui.tsx │ │ │ ├── issue-kanban-droppable-container.ui.tsx │ │ │ ├── issue-kanban.ui.tsx │ │ │ ├── issue-table.ui.tsx │ │ │ └── ticket-link.ui.tsx │ │ ├── layout │ │ ├── index.ts │ │ └── ui │ │ │ ├── header.ui.tsx │ │ │ ├── index.ts │ │ │ ├── layout.ui.tsx │ │ │ ├── menu-list.ui.tsx │ │ │ ├── project-select-box.ui.tsx │ │ │ └── user-profile-box.ui.tsx │ │ ├── project-settings │ │ ├── index.ts │ │ └── ui │ │ │ ├── api-key-setting.ui.tsx │ │ │ ├── index.ts │ │ │ ├── issue-tracker-setting.ui.tsx │ │ │ ├── member-setting.ui.tsx │ │ │ ├── project-info-setting.ui.tsx │ │ │ ├── role-setting.ui.tsx │ │ │ └── webhook-setting.ui.tsx │ │ └── setting-menu │ │ ├── index.ts │ │ ├── setting-menu.type.ts │ │ └── ui │ │ ├── index.ts │ │ ├── settings-menu-list.ui.tsx │ │ └── tenant │ │ ├── index.ts │ │ ├── login-setting.ui.tsx │ │ ├── tenant-info-setting.ui.tsx │ │ └── user-management-setting.ui.tsx │ ├── tailwind.config.ts │ └── tsconfig.json ├── assets ├── 01-feedback-tag.png ├── 02-Issue-Kanban.png ├── 03-issue-tracker.png ├── 04-single-signon.png ├── 05-role-management.png ├── 06-dashboard.png ├── cover.png ├── main.png └── sample.png ├── docker ├── api.dockerfile ├── build.sh ├── docker-compose.e2e.yml ├── docker-compose.infra-amd64.yml ├── docker-compose.infra-arm64.yml ├── docker-compose.yml └── web.dockerfile ├── package.json ├── packages ├── ufb-react │ ├── components.json │ ├── eslint.config.js │ ├── package.json │ ├── postcss.js │ ├── src │ │ ├── components │ │ │ ├── accordion.tsx │ │ │ ├── alert.tsx │ │ │ ├── badge.tsx │ │ │ ├── button.tsx │ │ │ ├── calendar.tsx │ │ │ ├── checkbox.tsx │ │ │ ├── combobox.tsx │ │ │ ├── dialog.tsx │ │ │ ├── divider.tsx │ │ │ ├── dropdown.tsx │ │ │ ├── icon.tsx │ │ │ ├── index.ts │ │ │ ├── input.tsx │ │ │ ├── menu.tsx │ │ │ ├── pagination.tsx │ │ │ ├── popover.tsx │ │ │ ├── radio-card.tsx │ │ │ ├── radio.tsx │ │ │ ├── scroll-area.tsx │ │ │ ├── select.tsx │ │ │ ├── sheet.tsx │ │ │ ├── spinner.tsx │ │ │ ├── switch.tsx │ │ │ ├── table.tsx │ │ │ ├── tabs.tsx │ │ │ ├── tag.tsx │ │ │ ├── textarea.tsx │ │ │ ├── timepicker.tsx │ │ │ ├── toast.tsx │ │ │ ├── toggle-group.tsx │ │ │ ├── tooltip.tsx │ │ │ └── use-theme.tsx │ │ ├── constants.ts │ │ ├── index.ts │ │ ├── lib │ │ │ ├── types.ts │ │ │ └── utils.ts │ │ └── types.ts │ ├── tailwindcss.config.js │ └── tsconfig.json ├── ufb-shared │ ├── eslint.config.js │ ├── package.json │ ├── src │ │ ├── error-code.enum.ts │ │ ├── index.ts │ │ └── timezone.ts │ └── tsconfig.json └── ufb-tailwindcss │ ├── eslint.config.js │ ├── index.d.ts │ ├── index.js │ ├── package.json │ └── src │ ├── base │ ├── base.css │ ├── postcss.config.js │ └── typography.css │ ├── borderRadius.js │ ├── boxShadow.js │ ├── build-functions │ ├── convert-css-to-js.js │ ├── generate-css.js │ ├── log.js │ └── merge-css.js │ ├── build.js │ ├── components │ ├── accordion.css │ ├── alert.css │ ├── badge.css │ ├── button.css │ ├── calendar.css │ ├── checkbox.css │ ├── combobox.css │ ├── dialog.css │ ├── divider.css │ ├── dropdown.css │ ├── icon.css │ ├── input.css │ ├── menu.css │ ├── nav-bar.css │ ├── pagination.css │ ├── popover.css │ ├── postcss.config.js │ ├── radio-card.css │ ├── radio.css │ ├── scroll-area.css │ ├── select.css │ ├── sheet.css │ ├── spinner.css │ ├── switch.css │ ├── table.css │ ├── tabs.css │ ├── tag.css │ ├── tailwind.config.js │ ├── textarea.css │ ├── toaster.css │ ├── toggle-group.css │ └── tooltip.css │ ├── spacing.js │ ├── theme.js │ └── utilities │ ├── accordion.css │ ├── alert.css │ ├── badge.css │ ├── button.css │ ├── checkbox.css │ ├── common.css │ ├── dialog.css │ ├── divider.css │ ├── input.css │ ├── menu.css │ ├── postcss.config.js │ ├── radio-card.css │ ├── radio.css │ ├── scroll-area.css │ ├── select.css │ ├── sheet.css │ ├── switch.css │ ├── table.css │ ├── tag.css │ ├── tailwind.config.js │ ├── toggle-group.css │ ├── tooltip.css │ └── utilities.css ├── pnpm-lock.yaml ├── pnpm-workspace.yaml ├── renovate.json ├── tooling ├── eslint-plugin-header │ ├── index.js │ ├── package.json │ └── src │ │ ├── comment-parser.js │ │ └── rules │ │ └── header.js ├── eslint │ ├── base.js │ ├── nestjs.js │ ├── nextjs.js │ ├── package.json │ ├── react.js │ ├── tsconfig.json │ └── types.d.ts ├── github │ ├── package.json │ └── setup │ │ └── action.yml ├── prettier │ ├── index.js │ ├── package.json │ └── tsconfig.json └── typescript │ ├── base.json │ ├── internal-package.json │ ├── nestjs.json │ └── package.json └── turbo.json /.dockerignore: -------------------------------------------------------------------------------- 1 | **/node_modules 2 | **/.next 3 | **/dist 4 | **/.env* 5 | !apps/web/.env.build 6 | docker 7 | volumes 8 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | contact_links: 2 | - name: Ask a question 3 | url: https://github.com/line/abc-user-feedback/discussions 4 | about: Ask questions and discuss with other community members 5 | - name: Feature request 6 | url: https://github.com/line/abc-user-feedback/discussions/new?category=ideas 7 | about: Feature requests should be opened as discussions 8 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | node_modules 5 | .pnp 6 | .pnp.js 7 | 8 | # testing 9 | coverage 10 | 11 | # next.js 12 | .next/ 13 | out/ 14 | build 15 | dist 16 | 17 | # misc 18 | .DS_Store 19 | *.pem 20 | 21 | # debug 22 | npm-debug.log* 23 | yarn-debug.log* 24 | yarn-error.log* 25 | .pnpm-debug.log* 26 | 27 | # local env files 28 | .env.local 29 | .env.development.local 30 | .env.test.local 31 | .env.production.local 32 | 33 | # turbo 34 | !.turbo/.gitkeep 35 | **/.turbo 36 | 37 | # .env 38 | .env* 39 | !.env.example 40 | !.env.build 41 | 42 | volumes 43 | 44 | .cache 45 | 46 | # playwright 47 | playwright-report 48 | test-results 49 | user.json 50 | 51 | # JetBrains 52 | .idea 53 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | node-linker=hoisted -------------------------------------------------------------------------------- /.nvmrc: -------------------------------------------------------------------------------- 1 | 22.16.0 2 | -------------------------------------------------------------------------------- /.turbo/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/line/abc-user-feedback/be66bba6d9f4144af3f0091a2ac4afae4ab40f0b/.turbo/.gitkeep -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": [ 3 | "bradlc.vscode-tailwindcss", 4 | "dbaeumer.vscode-eslint", 5 | "esbenp.prettier-vscode", 6 | "yoavbls.pretty-ts-errors" 7 | ] 8 | } 9 | -------------------------------------------------------------------------------- /apps/api/.prettierignore: -------------------------------------------------------------------------------- 1 | *.hbs 2 | -------------------------------------------------------------------------------- /apps/api/eslint.config.js: -------------------------------------------------------------------------------- 1 | import tsParser from '@typescript-eslint/parser'; 2 | import globals from 'globals'; 3 | 4 | import baseConfig from '@ufb/eslint-config/base'; 5 | import nestjsConfig from '@ufb/eslint-config/nestjs'; 6 | 7 | export default [ 8 | { 9 | ignores: ['dist/**', '**/*.js'], 10 | }, 11 | ...baseConfig, 12 | ...nestjsConfig, 13 | { 14 | languageOptions: { 15 | globals: { ...globals.node, ...globals.jest }, 16 | parser: tsParser, 17 | ecmaVersion: 5, 18 | sourceType: 'module', 19 | parserOptions: { 20 | project: 'tsconfig.json', 21 | tsconfigRootDir: import.meta.dirname, 22 | }, 23 | }, 24 | }, 25 | ]; 26 | -------------------------------------------------------------------------------- /apps/api/integration-test/jest-integration.json: -------------------------------------------------------------------------------- 1 | { 2 | "displayName": "api-integration", 3 | "moduleFileExtensions": ["js", "json", "ts"], 4 | "rootDir": ".", 5 | "testEnvironment": "node", 6 | "moduleNameMapper": { 7 | "^@/(.*)$": ["/../src/$1"] 8 | }, 9 | "testRegex": ".integration-spec.ts$", 10 | "transform": { 11 | "^.+\\.(t|j)s$": "ts-jest" 12 | }, 13 | "setupFilesAfterEnv": [ 14 | "/../integration-test/jest-integration.setup.ts" 15 | ], 16 | "globalSetup": "/../integration-test/global.setup.ts", 17 | "globalTeardown": "/../integration-test/global.teardown.ts" 18 | } 19 | -------------------------------------------------------------------------------- /apps/api/integration-test/jest-integration.setup.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | jest.mock('@nestjs-modules/mailer/dist/adapters/handlebars.adapter', () => { 17 | return { 18 | HandlebarsAdapter: jest.fn(), 19 | }; 20 | }); 21 | -------------------------------------------------------------------------------- /apps/api/jest.config.js: -------------------------------------------------------------------------------- 1 | export default { 2 | displayName: 'api', 3 | rootDir: './src', 4 | testRegex: '.*\\.spec\\.ts$', 5 | collectCoverageFrom: ['**/*.(t|j)s'], 6 | testEnvironment: 'node', 7 | moduleNameMapper: { 8 | '^@/(.*)$': ['/$2'], 9 | }, 10 | transform: { 11 | '^.+\\.(t|j)s$': ['@swc-node/jest'], 12 | }, 13 | moduleFileExtensions: ['js', 'json', 'ts'], 14 | coverageDirectory: '../coverage', 15 | clearMocks: true, 16 | resetMocks: true, 17 | setupFilesAfterEnv: ['/../jest.setup.js'], 18 | }; 19 | -------------------------------------------------------------------------------- /apps/api/nest-cli.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/nest-cli", 3 | "collection": "@nestjs/schematics", 4 | "sourceRoot": "src", 5 | "compilerOptions": { 6 | "builder": "swc", 7 | "deleteOutDir": true, 8 | "assets": ["**/*.hbs"], 9 | "watchAssets": true, 10 | "tsConfigPath": "tsconfig.json" 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /apps/api/src/common/decorators/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export { default as DtoValidator } from './dto-validator'; 17 | export { ApiOkResponsePagination } from './api-ok-response-pagination.decorator'; 18 | -------------------------------------------------------------------------------- /apps/api/src/common/decorators/is-password.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | import { applyDecorators } from '@nestjs/common'; 17 | import { IsString, MinLength } from 'class-validator'; 18 | 19 | export function IsPassword() { 20 | return applyDecorators(IsString(), MinLength(8)); 21 | } 22 | -------------------------------------------------------------------------------- /apps/api/src/common/dtos/pagination.dto.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export class PaginationDto { 17 | page: number; 18 | limit: number; 19 | } 20 | -------------------------------------------------------------------------------- /apps/api/src/common/dtos/time-range.dto.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | import { ApiProperty } from '@nestjs/swagger'; 17 | 18 | export class TimeRange { 19 | @ApiProperty({ name: 'gte (UTC)' }) 20 | gte: string; 21 | @ApiProperty({ name: 'lt (UTC)' }) 22 | lt: string; 23 | } 24 | -------------------------------------------------------------------------------- /apps/api/src/common/entities/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export { CommonEntity } from './common.entity'; 17 | -------------------------------------------------------------------------------- /apps/api/src/common/enums/event-status.enum.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export enum EventStatusEnum { 17 | ACTIVE = 'ACTIVE', 18 | INACTIVE = 'INACTIVE', 19 | } 20 | -------------------------------------------------------------------------------- /apps/api/src/common/enums/field-property.enum.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export enum FieldPropertyEnum { 17 | READ_ONLY = 'READ_ONLY', 18 | EDITABLE = 'EDITABLE', 19 | } 20 | -------------------------------------------------------------------------------- /apps/api/src/common/enums/field-status.enum.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export enum FieldStatusEnum { 17 | ACTIVE = 'ACTIVE', 18 | INACTIVE = 'INACTIVE', 19 | } 20 | -------------------------------------------------------------------------------- /apps/api/src/common/enums/issue-status.enum.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export enum IssueStatusEnum { 17 | INIT = 'INIT', 18 | ON_REVIEW = 'ON_REVIEW', 19 | IN_PROGRESS = 'IN_PROGRESS', 20 | RESOLVED = 'RESOLVED', 21 | PENDING = 'PENDING', 22 | } 23 | -------------------------------------------------------------------------------- /apps/api/src/common/enums/query-v2-conditions.enum.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export enum QueryV2ConditionsEnum { 17 | CONTAINS = 'CONTAINS', 18 | IS = 'IS', 19 | BETWEEN = 'BETWEEN', 20 | } 21 | -------------------------------------------------------------------------------- /apps/api/src/common/enums/sort-method.enum.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export enum SortMethodEnum { 17 | ASC = 'ASC', 18 | DESC = 'DESC', 19 | } 20 | -------------------------------------------------------------------------------- /apps/api/src/common/enums/webhook-status.enum.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export enum WebhookStatusEnum { 17 | ACTIVE = 'ACTIVE', 18 | INACTIVE = 'INACTIVE', 19 | } 20 | -------------------------------------------------------------------------------- /apps/api/src/common/filters/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export { HttpExceptionFilter } from './http-exception.filter'; 17 | -------------------------------------------------------------------------------- /apps/api/src/common/repositories/dtos/create-data.dto.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export class CreateDataDto { 17 | id?: string; 18 | index: string; 19 | data: Record; 20 | } 21 | -------------------------------------------------------------------------------- /apps/api/src/common/repositories/dtos/create-index.dto.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export class CreateIndexDto { 17 | index: string; 18 | } 19 | -------------------------------------------------------------------------------- /apps/api/src/common/repositories/dtos/delete-bulk-data.dto.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export class DeleteBulkDataDto { 17 | ids: number[]; 18 | index: string; 19 | } 20 | -------------------------------------------------------------------------------- /apps/api/src/common/repositories/dtos/update-data.dto.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export class UpdateDataDto { 17 | id: string; 18 | index: string; 19 | data: Record; 20 | } 21 | -------------------------------------------------------------------------------- /apps/api/src/common/repositories/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export { OpensearchRepository } from './opensearch.repository'; 17 | -------------------------------------------------------------------------------- /apps/api/src/common/validators/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export { ArrayDistinct } from './array-distinct'; 17 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/auth/dtos/jwt.dto.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export class JwtDto { 17 | accessToken: string; 18 | refreshToken: string; 19 | } 20 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/auth/dtos/responses/oauth-login-url.response.dto.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | import { ApiProperty } from '@nestjs/swagger'; 17 | 18 | export class OAuthLoginUrlResponseDto { 19 | @ApiProperty() 20 | url: string; 21 | } 22 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/auth/dtos/send-email-code.dto.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export class SendEmailCodeDto { 17 | email: string; 18 | } 19 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/auth/dtos/sign-up-email-user.dto.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export class SignUpEmailUserDto { 17 | email: string; 18 | password: string; 19 | } 20 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/auth/dtos/sign-up-invitation-user.dto.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | 17 | export class SignUpInvitationUserDto { 18 | password: string; 19 | code: string; 20 | email: string; 21 | } 22 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/auth/dtos/sign-up-oauth-user.dto.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export class SignUpOauthUserDto { 17 | email: string; 18 | projectName: string; 19 | roleName: string; 20 | } 21 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/auth/dtos/validate-email-user.dto.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export class ValidateEmailUserDto { 17 | email: string; 18 | password: string; 19 | } 20 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/auth/dtos/verify-email-code.dto.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export class VerifyEmailCodeDto { 17 | code: string; 18 | email: string; 19 | } 20 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/auth/exceptions/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export { PasswordNotMatchException } from './password-not.match.exception'; 17 | export { UserBlockedException } from './user-blocked.exception'; 18 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/auth/guards/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export { JwtAuthGuard } from './jwt-auth.guard'; 17 | export { ApiKeyAuthGuard } from './api-key.guard'; 18 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/channel/channel/dtos/find-by-channel-id.dto.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export class FindByChannelIdDto { 17 | channelId: number; 18 | } 19 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/channel/channel/dtos/find-one-by-name-and-project-id.dto.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export class FindOneByNameAndProjectIdDto { 17 | name: string; 18 | projectId: number; 19 | } 20 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/channel/field/dtos/create-many-fields.dto.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | import type { CreateFieldDto } from './create-field.dto'; 17 | 18 | export class CreateManyFieldsDto { 19 | channelId: number; 20 | fields: CreateFieldDto[]; 21 | } 22 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/channel/field/dtos/replace-many-fields.dto.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | import type { ReplaceFieldDto } from './replace-field.dto'; 17 | 18 | export class ReplaceManyFieldsDto { 19 | channelId: number; 20 | fields: ReplaceFieldDto[]; 21 | } 22 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/channel/field/dtos/responses/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export { FindFieldsResponseDto } from './find-fields-response.dto'; 17 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/channel/field/exceptions/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export { FieldNameDuplicatedException } from './field-name-duplicated.exception'; 17 | export { FieldKeyDuplicatedException } from './field-key-duplicated.exception'; 18 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/channel/option/dtos/create-many-options.dto.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export class CreateManyOptionsDto { 17 | fieldId: number; 18 | options: { name: string; key: string }[]; 19 | } 20 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/channel/option/dtos/create-option.dto.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export class CreateOptionDto { 17 | fieldId: number; 18 | name: string; 19 | key: string; 20 | } 21 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/channel/option/dtos/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export { CreateManyOptionsDto } from './create-many-options.dto'; 17 | export { ReplaceManyOptionsDto } from './replace-select-options.dto'; 18 | export { CreateOptionDto } from './create-option.dto'; 19 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/channel/option/dtos/replace-select-options.dto.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export class ReplaceManyOptionsDto { 17 | fieldId: number; 18 | options: { id?: number; name: string; key: string }[] | undefined; 19 | } 20 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/channel/option/dtos/requests/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export { CreateOptionRequestDto } from './create-option-request.dto'; 17 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/channel/option/dtos/responses/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export { FindOptionByFieldIdResponseDto } from './find-option-by-field-id-response.dto'; 17 | export { CreateOptionResponseDto } from './create-option-response.dto'; 18 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/channel/option/exceptions/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export { OptionNameDuplicatedException } from './option-name-duplicated.exception'; 17 | export { OptionKeyDuplicatedException } from './option-key-duplicated.exception'; 18 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/feedback/dtos/add-issue.dto.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | 17 | export class AddIssueDto { 18 | channelId: number; 19 | feedbackId: number; 20 | issueId: number; 21 | } 22 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/feedback/dtos/count-by-project-id.dto.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export class CountByProjectIdDto { 17 | projectId: number; 18 | } 19 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/feedback/dtos/delete-by-ids.dto.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export class DeleteByIdsDto { 17 | channelId: number; 18 | feedbackIds: number[]; 19 | } 20 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/feedback/dtos/image-upload-url-test.dto.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | 17 | export class ImageUploadUrlTestDto { 18 | accessKeyId: string; 19 | secretAccessKey: string; 20 | endpoint: string; 21 | region: string; 22 | } 23 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/feedback/dtos/remove-issue.dto.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | 17 | export class RemoveIssueDto { 18 | channelId: number; 19 | feedbackId: number; 20 | issueId: number; 21 | } 22 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/feedback/dtos/responses/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export { FindFeedbacksByChannelIdResponseDto } from './find-feedbacks-by-channel-id-response.dto'; 17 | export { AddIssueResponseDto } from './add-issue-response.dto'; 18 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/project/api-key/dtos/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export { CreateApiKeyDto } from './create-api-key.dto'; 17 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/project/api-key/dtos/requests/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export { CreateApiKeyRequestDto } from './create-api-key-request.dto'; 17 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/project/api-key/dtos/responses/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export { CreateApiKeyResponseDto } from './create-api-key-response.dto'; 17 | export { FindApiKeysResponseDto } from './find-api-keys-response.dto'; 18 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/project/category/dtos/find-by-category-id.dto.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export class FindByCategoryIdDto { 17 | categoryId: number; 18 | } 19 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/project/category/dtos/requests/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export { CreateCategoryRequestDto } from './create-category-request.dto'; 17 | export { UpdateCategoryRequestDto } from './update-category-request.dto'; 18 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/project/category/dtos/responses/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export { CreateCategoryResponseDto } from './create-category-response.dto'; 17 | export { GetAllCategoriesResponseDto } from './get-all-categories-response.dto'; 18 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/project/issue-tracker/dtos/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export { CreateIssueTrackerDto } from './create-issue-tracker.dto'; 17 | export { UpdateIssueTrackerDto } from './update-issue-tracker.dto'; 18 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/project/issue-tracker/dtos/requests/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export { CreateIssueTrackerRequestDto } from './create-issue-tracker-request.dto'; 17 | export { UpdateIssueTrackerRequestDto } from './update-issue-tracker-request.dto'; 18 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/project/issue-tracker/dtos/update-issue-tracker.dto.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | import { CreateIssueTrackerDto } from './create-issue-tracker.dto'; 17 | 18 | export class UpdateIssueTrackerDto extends CreateIssueTrackerDto {} 19 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/project/issue/dtos/find-by-issue-id.dto.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export class FindByIssueIdDto { 17 | issueId: number; 18 | } 19 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/project/issue/dtos/find-feedbacks-by-issue-id.dto.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | import { PaginationDto } from '../../../../../common/dtos'; 17 | 18 | export class FindFeedbacksByIssueIdDto extends PaginationDto { 19 | issueId: number; 20 | } 21 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/project/member/dtos/create-member.dto.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export class CreateMemberDto { 17 | roleId: number; 18 | userId: number; 19 | } 20 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/project/member/dtos/find-by-project-id.dto.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | import type { SortMethodEnum } from '@/common/enums'; 17 | 18 | export class FindByProjectIdDto { 19 | projectId: number; 20 | sort: { createdAt: SortMethodEnum }; 21 | } 22 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/project/member/dtos/responses/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export { GetAllMemberResponseDto } from './get-all-members.dto'; 17 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/project/member/dtos/update-member.dto.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export class UpdateMemberDto { 17 | memberId: number; 18 | roleId: number; 19 | } 20 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/project/project/dtos/find-by-project-id.dto.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export class FindByProjectIdDto { 17 | projectId: number; 18 | } 19 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/project/project/dtos/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export { FindAllProjectsDto } from './find-all-projects.dto'; 17 | export { CreateProjectDto } from './create-project.dto'; 18 | export { UpdateProjectDto } from './update-project.dto'; 19 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/project/project/dtos/requests/update-project-request.dto.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | import { CreateProjectRequestDto } from './create-project-request.dto'; 17 | 18 | export class UpdateProjectRequestDto extends CreateProjectRequestDto {} 19 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/project/project/dtos/responses/update-project-response.dto.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | import { CreateProjectResponseDto } from './create-project-response.dto'; 17 | 18 | export class UpdateProjectResponseDto extends CreateProjectResponseDto {} 19 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/project/project/dtos/update-project.dto.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | import { CreateProjectDto } from './create-project.dto'; 17 | 18 | export class UpdateProjectDto extends CreateProjectDto { 19 | projectId: number; 20 | } 21 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/project/role/dtos/create-role.dto.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | import type { PermissionEnum } from '../permission.enum'; 17 | 18 | export class CreateRoleDto { 19 | projectId: number; 20 | name: string; 21 | permissions: PermissionEnum[]; 22 | } 23 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/project/role/dtos/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export { CreateRoleDto } from './create-role.dto'; 17 | export { UpdateRoleDto } from './update-role.dto'; 18 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/project/role/dtos/requests/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export { CreateRoleRequestDto } from './create-role-request.dto'; 17 | export { UpdateRoleRequestDto } from './update-role-request.dto'; 18 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/project/role/dtos/requests/update-role-request.dto.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | import { CreateRoleRequestDto } from './create-role-request.dto'; 17 | 18 | export class UpdateRoleRequestDto extends CreateRoleRequestDto {} 19 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/project/role/dtos/responses/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export { GetAllRolesResponseDto } from './get-all-roles-response.dto'; 17 | export { GetRoleByIdResponseDto } from './get-role-by-id-response.dto'; 18 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/project/webhook/dtos/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export { CreateWebhookDto } from './create-webhook.dto'; 17 | export { EventDto } from './event.dto'; 18 | export { UpdateWebhookDto } from './update-webhook.dto'; 19 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/project/webhook/dtos/requests/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export { CreateWebhookRequestDto } from './create-webhook-request.dto'; 17 | export { UpdateWebhookRequestDto } from './update-webhook-request.dto'; 18 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/project/webhook/dtos/requests/update-webhook-request.dto.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | import { CreateWebhookRequestDto } from './create-webhook-request.dto'; 17 | 18 | export class UpdateWebhookRequestDto extends CreateWebhookRequestDto {} 19 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/project/webhook/dtos/responses/update-webhook-response.dto.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | import { CreateWebhookResponseDto } from './create-webhook-response.dto'; 17 | 18 | export class UpdateWebhookResponseDto extends CreateWebhookResponseDto {} 19 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/project/webhook/exceptions/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export { WebhookAlreadyExistsException } from './webhook-already-exists.exception'; 17 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/statistics/feedback-issue/dtos/get-count-by-date-by-issue.dto.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export class GetCountByDateByIssueDto { 17 | startDate: string; 18 | endDate: string; 19 | interval: 'day' | 'week' | 'month'; 20 | issueIds: number[]; 21 | } 22 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/statistics/feedback-issue/dtos/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export { GetCountByDateByIssueDto } from './get-count-by-date-by-issue.dto'; 17 | export { UpdateFeedbackCountDto } from './update-count.dto'; 18 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/statistics/feedback-issue/dtos/responses/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | 17 | export { FindCountByDateByIssueResponseDto } from './find-count-by-date-by-issue-response.dto'; 18 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/statistics/feedback-issue/dtos/update-count.dto.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export class UpdateFeedbackCountDto { 17 | issueId: number; 18 | date: Date; 19 | feedbackCount?: number; 20 | } 21 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/statistics/feedback/dtos/get-count.dto.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export class GetCountDto { 17 | from: Date; 18 | to: Date; 19 | projectId: number; 20 | } 21 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/statistics/feedback/dtos/get-issued-rate.dto.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export class GetIssuedRateDto { 17 | from: Date; 18 | to: Date; 19 | projectId: number; 20 | } 21 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/statistics/feedback/dtos/update-count.dto.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export class UpdateCountDto { 17 | channelId: number; 18 | date: Date; 19 | count?: number; 20 | } 21 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/statistics/issue/dtos/get-count-by-date-by-channel.dto.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export class GetCountByDateDto { 17 | startDate: string; 18 | endDate: string; 19 | interval: 'day' | 'week' | 'month'; 20 | projectId: number; 21 | } 22 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/statistics/issue/dtos/get-count-by-status.dto.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export class GetCountByStatusDto { 17 | projectId: number; 18 | } 19 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/statistics/issue/dtos/get-count.dto.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export class GetCountDto { 17 | from: Date; 18 | to: Date; 19 | projectId: number; 20 | } 21 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/statistics/issue/dtos/update-count.dto.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export class UpdateCountDto { 17 | projectId: number; 18 | date: Date; 19 | count?: number; 20 | } 21 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/tenant/dtos/feedback-count-by-tenant-id.dto.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export class FeedbackCountByTenantIdDto { 17 | tenantId: number; 18 | } 19 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/tenant/dtos/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export { SetupTenantDto } from './setup-tenant.dto'; 17 | export { UpdateTenantDto } from './update-tenant.dto'; 18 | export { FeedbackCountByTenantIdDto } from './feedback-count-by-tenant-id.dto'; 19 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/tenant/dtos/requests/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export { SetupTenantRequestDto } from './setup-tenant-request.dto'; 17 | export { UpdateTenantRequestDto } from './update-tenant-request.dto'; 18 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/tenant/dtos/responses/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export { GetTenantResponseDto } from './get-tenant-response.dto'; 17 | export { CountFeedbacksByTenantIdResponseDto } from './count-feedbacks-by-id-response.dto'; 18 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/tenant/entities/enums/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export { LoginButtonTypeEnum } from './login-button-type.enum'; 17 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/tenant/entities/enums/login-button-type.enum.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export enum LoginButtonTypeEnum { 17 | CUSTOM = 'CUSTOM', 18 | GOOGLE = 'GOOGLE', 19 | } 20 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/tenant/exceptions/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export { TenantNotFoundException } from './tenant-not-found.exception'; 17 | export { TenantAlreadyExistsException } from './tenant-already-exists.exception'; 18 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/user/decorators/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export { CurrentUser } from './current-user.decorator'; 17 | export { IsNullable } from './is-nullable.decorator'; 18 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/user/dtos/change-password.dto.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export class ChangePasswordDto { 17 | userId: number; 18 | password: string; 19 | newPassword: string; 20 | } 21 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/user/dtos/create-email-user.dto.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export class CreateEmailUserDto { 17 | email: string; 18 | password: string; 19 | } 20 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/user/dtos/create-oauth-user.dto.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export class CreateOAuthUserDto { 17 | email: string; 18 | } 19 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/user/dtos/reset-password.dto.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export class ResetPasswordDto { 17 | email: string; 18 | code: string; 19 | password: string; 20 | } 21 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/user/dtos/responses/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export { GetAllUserResponseDto } from './get-all-user-response.dto'; 17 | export { GetRolesByIdResponseDto } from './get-roles-by-id.response.dto'; 18 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/user/entities/enums/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export { UserStateEnum } from './user-state.enum'; 17 | export { UserTypeEnum } from './user-type.enum'; 18 | export { SignUpMethodEnum } from './sign-up-method.enum'; 19 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/user/entities/enums/sign-up-method.enum.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export enum SignUpMethodEnum { 17 | EMAIL = 'EMAIL', 18 | OAUTH = 'OAUTH', 19 | } 20 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/user/entities/enums/user-state.enum.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export enum UserStateEnum { 17 | Active = 'Active', 18 | Blocked = 'Blocked', 19 | } 20 | -------------------------------------------------------------------------------- /apps/api/src/domains/admin/user/entities/enums/user-type.enum.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export enum UserTypeEnum { 17 | SUPER = 'SUPER', 18 | GENERAL = 'GENERAL', 19 | } 20 | -------------------------------------------------------------------------------- /apps/api/src/shared/code/code-type.enum.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export enum CodeTypeEnum { 17 | EMAIL_VEIRIFICATION = 'EMAIL_VEIRIFICATION', 18 | RESET_PASSWORD = 'RESET_PASSWORD', 19 | USER_INVITATION = 'USER_INVITATION', 20 | } 21 | -------------------------------------------------------------------------------- /apps/api/src/shared/code/dtos/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export { VerifyCodeDto } from './set-code-verified.dto'; 17 | export { SetCodeDto } from './set-code.dto'; 18 | -------------------------------------------------------------------------------- /apps/api/src/shared/code/dtos/set-code-verified.dto.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | import type { CodeTypeEnum } from '../code-type.enum'; 17 | 18 | export class VerifyCodeDto { 19 | type: CodeTypeEnum; 20 | key: string; 21 | code: string; 22 | } 23 | -------------------------------------------------------------------------------- /apps/api/src/shared/mailing/exceptions/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export { NotVerifiedEmailException } from './not-verified-email.exception'; 17 | -------------------------------------------------------------------------------- /apps/api/src/shared/mailing/send-mail.dto.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export class SendMailDto { 17 | code: string; 18 | email: string; 19 | } 20 | -------------------------------------------------------------------------------- /apps/api/src/utils/validate-unique.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export const validateUnique = (objList: T[] | undefined, name: keyof T) => { 17 | return ( 18 | new Set((objList ?? []).map((v) => v[name])).size === (objList ?? []).length 19 | ); 20 | }; 21 | -------------------------------------------------------------------------------- /apps/api/test/jest-e2e.json: -------------------------------------------------------------------------------- 1 | { 2 | "displayName": "api-e2e", 3 | "moduleFileExtensions": ["js", "json", "ts"], 4 | "rootDir": ".", 5 | "testEnvironment": "node", 6 | "moduleNameMapper": { 7 | "^@/(.*)$": ["/../src/$1"] 8 | }, 9 | "testRegex": ".e2e-spec.ts$", 10 | "transform": { 11 | "^.+\\.(t|j)s$": "ts-jest" 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /apps/api/tsconfig.build.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "exclude": ["node_modules", "test", "dist", "**/*spec.ts"] 4 | } 5 | -------------------------------------------------------------------------------- /apps/api/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@ufb/tsconfig/nestjs.json", 3 | "compilerOptions": { 4 | "outDir": "./dist", 5 | "baseUrl": "./", 6 | "paths": { 7 | "@/*": ["./src/*"] 8 | } 9 | }, 10 | "include": ["src", "test", "integration-test"], 11 | "exclude": ["node_modules", "dist"] 12 | } 13 | -------------------------------------------------------------------------------- /apps/cli/config.toml: -------------------------------------------------------------------------------- 1 | [api] 2 | MYSQL_PRIMARY_URL="mysql://root:userfeedback@host.docker.internal:13306/userfeedback" 3 | # MYSQL_SECONDARY_URLS= ["mysql://root:userfeedback@host.docker.internal:13306/userfeedback"] 4 | OPENSEARCH_USE=true 5 | OPENSEARCH_NODE="http://localhost:9200" 6 | OPENSEARCH_USERNAME="UserFeedback123!@#" 7 | SMTP_HOST="localhost" 8 | SMTP_PORT=25 9 | SMTP_SENDER="noreply@linecorp.com" 10 | SMTP_BASE_URL="http://localhost:3000" 11 | AUTO_MIGRATION=true 12 | NODE_OPTIONS="--max_old_space_size=3072" 13 | BASE_URL="http://localhost:3000" 14 | JWT_SECRET="secret" 15 | OPENSEARCH_PASSWORD="UserFeedback123!@#" 16 | MASTER_API_KEY="MASTER_API_KEY" 17 | 18 | [web] 19 | NEXT_PUBLIC_API_BASE_URL="http://localhost:4000" 20 | -------------------------------------------------------------------------------- /apps/cli/eslint.config.js: -------------------------------------------------------------------------------- 1 | import baseConfig from '@ufb/eslint-config/base'; 2 | 3 | export default [ 4 | { 5 | ignores: ['dist/**', '**/*.js'], 6 | }, 7 | ...baseConfig, 8 | ]; 9 | -------------------------------------------------------------------------------- /apps/cli/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "auf-cli", 3 | "version": "1.0.10", 4 | "bin": { 5 | "auf-cli": "./dist/auf-cli.js" 6 | }, 7 | "scripts": { 8 | "build": "tsc", 9 | "clean": "git clean -xdf dist .turbo node_modules .cache", 10 | "format": "prettier --check . --ignore-path ../../.gitignore", 11 | "format:fix": "prettier --write --list-different .", 12 | "lint": "eslint", 13 | "start": "node dist/auf-cli.js", 14 | "start:dev": "ts-node bin/auf-cli.ts" 15 | }, 16 | "dependencies": { 17 | "@types/prompts": "^2.4.9", 18 | "child_process": "^1.0.2", 19 | "commander": "^14.0.0", 20 | "js-toml": "^1.0.0" 21 | }, 22 | "devDependencies": { 23 | "@ufb/eslint-config": "workspace:*", 24 | "@ufb/prettier-config": "workspace:*", 25 | "@ufb/tsconfig": "workspace:*", 26 | "ts-node": "^10.9.2" 27 | }, 28 | "prettier": "@ufb/prettier-config" 29 | } 30 | -------------------------------------------------------------------------------- /apps/cli/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@ufb/tsconfig/nestjs.json", 3 | "compilerOptions": { 4 | "outDir": "./dist", 5 | "baseUrl": "./", 6 | "paths": { 7 | "@/*": ["./src/*"] 8 | } 9 | }, 10 | "include": ["bin"], 11 | "exclude": ["node_modules", "dist"] 12 | } 13 | -------------------------------------------------------------------------------- /apps/e2e/database-utils.ts: -------------------------------------------------------------------------------- 1 | import mysql from 'mysql2/promise'; 2 | 3 | export async function createConnection() { 4 | return await mysql.createConnection({ 5 | host: '127.0.0.1', 6 | port: 13307, 7 | user: 'userfeedback', 8 | password: 'userfeedback', 9 | database: 'e2e', 10 | }); 11 | } 12 | -------------------------------------------------------------------------------- /apps/e2e/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "e2e", 3 | "version": "1.0.0", 4 | "description": "", 5 | "scripts": { 6 | "clean": "git clean -xdf node_modules playwright-report test-results", 7 | "test:e2e": "playwright test" 8 | }, 9 | "devDependencies": { 10 | "@playwright/test": "^1.52.0", 11 | "axios": "^1.7.2", 12 | "mysql2": "^3.9.7" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /apps/web/.env.build: -------------------------------------------------------------------------------- 1 | # DO NOT MODIFY THIS FILE. THIS FILE IS FOR THE DOCKER BUILD 2 | NEXT_PUBLIC_API_BASE_URL=APP_NEXT_PUBLIC_API_BASE_URL -------------------------------------------------------------------------------- /apps/web/.env.example: -------------------------------------------------------------------------------- 1 | NEXT_PUBLIC_API_BASE_URL=http://localhost:4000 2 | -------------------------------------------------------------------------------- /apps/web/.prettierignore: -------------------------------------------------------------------------------- 1 | api.type.ts 2 | -------------------------------------------------------------------------------- /apps/web/entrypoint.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | echo "NEXT_PUBLIC_API_BASE_URL: $NEXT_PUBLIC_API_BASE_URL" 3 | 4 | echo "Check that we have NEXT_PUBLIC_API_BASE_URL" 5 | 6 | test -n "$NEXT_PUBLIC_API_BASE_URL" 7 | 8 | find /app/apps/web/.next \( -type d -name .git -prune \) -o -type f -print0 | xargs -0 sed -i "s#APP_NEXT_PUBLIC_API_BASE_URL#$NEXT_PUBLIC_API_BASE_URL#g" 9 | 10 | echo "Starting Nextjs" 11 | exec "$@" 12 | -------------------------------------------------------------------------------- /apps/web/eslint.config.js: -------------------------------------------------------------------------------- 1 | import baseConfig from '@ufb/eslint-config/base'; 2 | import nextjsConfig from '@ufb/eslint-config/nextjs'; 3 | import reactConfig from '@ufb/eslint-config/react'; 4 | 5 | /** @type {import('typescript-eslint').Config} */ 6 | export default [ 7 | { 8 | ignores: ['.next/**', 'jest.setup.ts', 'next-env.d.ts', '**/api.type.ts'], 9 | }, 10 | ...baseConfig, 11 | ...reactConfig, 12 | ...nextjsConfig, 13 | ]; 14 | -------------------------------------------------------------------------------- /apps/web/next-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | 4 | // NOTE: This file should not be edited 5 | // see https://nextjs.org/docs/pages/api-reference/config/typescript for more information. 6 | -------------------------------------------------------------------------------- /apps/web/next.config.js: -------------------------------------------------------------------------------- 1 | import { fileURLToPath } from 'url'; 2 | import createJiti from 'jiti'; 3 | 4 | import * as i18nConfig from './next-i18next.config.js'; 5 | 6 | createJiti(fileURLToPath(import.meta.url))('./src/env'); 7 | 8 | /** @type {import('next').NextConfig} */ 9 | const nextConfig = { 10 | reactStrictMode: process.env.NODE_ENV === 'production', 11 | i18n: i18nConfig.default.i18n, 12 | output: 'standalone', 13 | eslint: { ignoreDuringBuilds: true }, 14 | transpilePackages: ['@ufb/react'], 15 | compiler: { removeConsole: process.env.NODE_ENV === 'production' }, 16 | images: { remotePatterns: [{ hostname: '*' }] }, 17 | }; 18 | 19 | export default nextConfig; 20 | -------------------------------------------------------------------------------- /apps/web/postcss.config.js: -------------------------------------------------------------------------------- 1 | export default { 2 | plugins: ['tailwindcss', 'autoprefixer'], 3 | }; 4 | -------------------------------------------------------------------------------- /apps/web/public/assets/images/empty-image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/line/abc-user-feedback/be66bba6d9f4144af3f0091a2ac4afae4ab40f0b/apps/web/public/assets/images/empty-image.png -------------------------------------------------------------------------------- /apps/web/public/assets/images/image-setting-help.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/line/abc-user-feedback/be66bba6d9f4144af3f0091a2ac4afae4ab40f0b/apps/web/public/assets/images/image-setting-help.png -------------------------------------------------------------------------------- /apps/web/public/assets/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/line/abc-user-feedback/be66bba6d9f4144af3f0091a2ac4afae4ab40f0b/apps/web/public/assets/images/logo.png -------------------------------------------------------------------------------- /apps/web/public/assets/images/sample_image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/line/abc-user-feedback/be66bba6d9f4144af3f0091a2ac4afae4ab40f0b/apps/web/public/assets/images/sample_image.png -------------------------------------------------------------------------------- /apps/web/public/assets/images/sample_image1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/line/abc-user-feedback/be66bba6d9f4144af3f0091a2ac4afae4ab40f0b/apps/web/public/assets/images/sample_image1.png -------------------------------------------------------------------------------- /apps/web/public/assets/images/temp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/line/abc-user-feedback/be66bba6d9f4144af3f0091a2ac4afae4ab40f0b/apps/web/public/assets/images/temp.png -------------------------------------------------------------------------------- /apps/web/public/assets/images/webhook-help.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/line/abc-user-feedback/be66bba6d9f4144af3f0091a2ac4afae4ab40f0b/apps/web/public/assets/images/webhook-help.png -------------------------------------------------------------------------------- /apps/web/public/assets/mailing/email-code.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/line/abc-user-feedback/be66bba6d9f4144af3f0091a2ac4afae4ab40f0b/apps/web/public/assets/mailing/email-code.png -------------------------------------------------------------------------------- /apps/web/public/assets/mailing/email-reset.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/line/abc-user-feedback/be66bba6d9f4144af3f0091a2ac4afae4ab40f0b/apps/web/public/assets/mailing/email-reset.png -------------------------------------------------------------------------------- /apps/web/public/assets/mailing/email-signup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/line/abc-user-feedback/be66bba6d9f4144af3f0091a2ac4afae4ab40f0b/apps/web/public/assets/mailing/email-signup.png -------------------------------------------------------------------------------- /apps/web/public/assets/mailing/github-mark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/line/abc-user-feedback/be66bba6d9f4144af3f0091a2ac4afae4ab40f0b/apps/web/public/assets/mailing/github-mark.png -------------------------------------------------------------------------------- /apps/web/public/assets/mailing/globe-fill.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/line/abc-user-feedback/be66bba6d9f4144af3f0091a2ac4afae4ab40f0b/apps/web/public/assets/mailing/globe-fill.png -------------------------------------------------------------------------------- /apps/web/public/assets/mailing/logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /apps/web/public/assets/mailing/mail-fill.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/line/abc-user-feedback/be66bba6d9f4144af3f0091a2ac4afae4ab40f0b/apps/web/public/assets/mailing/mail-fill.png -------------------------------------------------------------------------------- /apps/web/public/assets/mailing/title-ufb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/line/abc-user-feedback/be66bba6d9f4144af3f0091a2ac4afae4ab40f0b/apps/web/public/assets/mailing/title-ufb.png -------------------------------------------------------------------------------- /apps/web/src/entities/api-key/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export * from './ui'; 17 | export * from './api-key.type'; 18 | -------------------------------------------------------------------------------- /apps/web/src/entities/api-key/ui/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export { default as ApiKeyTable } from './api-key-table.ui'; 17 | -------------------------------------------------------------------------------- /apps/web/src/entities/category/category.schema.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | 17 | import { z } from 'zod'; 18 | 19 | export const categorySchema = z.object({ 20 | id: z.number(), 21 | name: z.string().trim(), 22 | }); 23 | -------------------------------------------------------------------------------- /apps/web/src/entities/category/category.type.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | import type { z } from 'zod'; 17 | 18 | import type { categorySchema } from './category.schema'; 19 | 20 | export type Category = z.infer; 21 | -------------------------------------------------------------------------------- /apps/web/src/entities/category/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export * from './category.type'; 17 | export * from './ui'; 18 | -------------------------------------------------------------------------------- /apps/web/src/entities/category/lib/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export { default as useCategorySearchInfinite } from './use-category-search-infinite'; 17 | -------------------------------------------------------------------------------- /apps/web/src/entities/category/ui/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export { default as CategoryCombobox } from './category-combobox.ui'; 17 | -------------------------------------------------------------------------------- /apps/web/src/entities/channel/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export * from './channel.type'; 17 | export * from './channel.schema'; 18 | export * from './ui'; 19 | -------------------------------------------------------------------------------- /apps/web/src/entities/channel/lib/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export { default as useRoutingChannelCreation } from './use-routing-channel-creation'; 17 | -------------------------------------------------------------------------------- /apps/web/src/entities/channel/ui/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export { default as ChannelInfoForm } from './channel-info-form.ui'; 17 | export { default as ImageConfigForm } from './image-config-form.ui'; 18 | -------------------------------------------------------------------------------- /apps/web/src/entities/dashboard/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export * from './ui'; 17 | -------------------------------------------------------------------------------- /apps/web/src/entities/dashboard/lib/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export { default as useLineChartData } from './use-line-chart-data'; 17 | -------------------------------------------------------------------------------- /apps/web/src/entities/feedback/feedback.type.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | 17 | export type Feedback = Record; 18 | -------------------------------------------------------------------------------- /apps/web/src/entities/feedback/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export * from './lib'; 17 | export * from './ui'; 18 | export * from './feedback.type'; 19 | -------------------------------------------------------------------------------- /apps/web/src/entities/field/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export * from './field.type'; 17 | export * from './ui'; 18 | export * from './field-utils'; 19 | -------------------------------------------------------------------------------- /apps/web/src/entities/issue-tracker/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export * from './ui'; 17 | export * from './issue-tracker.type'; 18 | export * from './issue-tracker.schema'; 19 | -------------------------------------------------------------------------------- /apps/web/src/entities/issue-tracker/issue-tracker.type.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | import type { z } from 'zod'; 17 | 18 | import type { issueTrackerSchema } from './issue-tracker.schema'; 19 | 20 | export type IssueTracker = z.infer; 21 | -------------------------------------------------------------------------------- /apps/web/src/entities/issue-tracker/ui/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export { default as IssueTrackerForm } from './issue-tracker-form.ui'; 17 | -------------------------------------------------------------------------------- /apps/web/src/entities/issue/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export * from './issue.type'; 17 | export * from './ui'; 18 | export * from './lib'; 19 | -------------------------------------------------------------------------------- /apps/web/src/entities/issue/lib/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export { default as useIssueSearch } from './use-issue-search'; 17 | export { default as useIssueSearchInfinite } from './use-issue-search-infinite'; 18 | -------------------------------------------------------------------------------- /apps/web/src/entities/issue/ui/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export { default as IssueBadge } from './issue-badge.ui'; 17 | export { default as IssueSelectBox } from './issue-select-box.ui'; 18 | -------------------------------------------------------------------------------- /apps/web/src/entities/member/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export * from './ui'; 17 | export * from './member.type'; 18 | export * from './member.schema'; 19 | -------------------------------------------------------------------------------- /apps/web/src/entities/member/lib/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export { default as useMembmerSearch } from './use-member-search'; 17 | -------------------------------------------------------------------------------- /apps/web/src/entities/member/ui/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export { default as MemberTable } from './member-table.ui'; 17 | export { default as MemberFormDialog } from './member-form-dialog.ui'; 18 | -------------------------------------------------------------------------------- /apps/web/src/entities/project/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export * from './ui'; 17 | export * from './project.schema'; 18 | export * from './project.type'; 19 | export * from './timezone.util'; 20 | -------------------------------------------------------------------------------- /apps/web/src/entities/project/ui/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export { default as ProjectInfoForm } from './project-info-form.ui'; 17 | export { default as ProjectGuard } from './project-guard.ui'; 18 | -------------------------------------------------------------------------------- /apps/web/src/entities/role/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export * from './ui'; 17 | export * from './role.type'; 18 | export * from './permission.type'; 19 | export * from './role.schema'; 20 | -------------------------------------------------------------------------------- /apps/web/src/entities/role/ui/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export { default as RoleTable } from './role-table.ui'; 17 | export { default as RoleFormSheet } from './role-form-sheet.ui'; 18 | -------------------------------------------------------------------------------- /apps/web/src/entities/tenant/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export * from './ui'; 17 | export * from './tenant.model'; 18 | export * from './tenant.type'; 19 | export * from './tenant.schema'; 20 | -------------------------------------------------------------------------------- /apps/web/src/entities/user/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export * from './user.model'; 17 | export * from './user.schema'; 18 | export * from './user.type'; 19 | export * from './ui'; 20 | export * from './lib'; 21 | -------------------------------------------------------------------------------- /apps/web/src/entities/user/lib/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export { default as useUserSearch } from './use-user-search'; 17 | -------------------------------------------------------------------------------- /apps/web/src/entities/webhook/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export * from './ui'; 17 | export * from './webhook.type'; 18 | -------------------------------------------------------------------------------- /apps/web/src/entities/webhook/ui/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export { default as WebhookTable } from './webhook-table.ui'; 17 | export { default as WebhookFormSheet } from './webhook-form-sheet.ui'; 18 | -------------------------------------------------------------------------------- /apps/web/src/features/auth/reset-password-with-email/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export * from './ui'; 17 | -------------------------------------------------------------------------------- /apps/web/src/features/auth/reset-password-with-email/request-reset-password-with-email.schema.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | import { z } from 'zod'; 17 | 18 | export const requestResetPasswordWithEmailSchema = z.object({ 19 | email: z.string().email(), 20 | }); 21 | -------------------------------------------------------------------------------- /apps/web/src/features/auth/sign-in-with-oauth/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export * from './ui'; 17 | export * from './lib'; 18 | -------------------------------------------------------------------------------- /apps/web/src/features/auth/sign-in-with-oauth/lib/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export { useOAuthCallback } from './use-oauth-callback'; 17 | -------------------------------------------------------------------------------- /apps/web/src/features/auth/sign-in-with-oauth/ui/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export { default as SignInWithOAuthButton } from './sign-in-with-oauth-button.ui'; 17 | -------------------------------------------------------------------------------- /apps/web/src/features/auth/sign-up-with-email/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export * from './ui'; 17 | export type { SignUpWithEmailType } from './sign-up-with-email.type'; 18 | -------------------------------------------------------------------------------- /apps/web/src/features/auth/sign-up-with-email/ui/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export { default as SignUpWithEmailForm } from './sign-up-with-email-form.ui'; 17 | -------------------------------------------------------------------------------- /apps/web/src/features/create-channel/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export * from './ui'; 17 | export * from './create-channel-model'; 18 | -------------------------------------------------------------------------------- /apps/web/src/features/create-channel/ui/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export { default as CreateChannel } from './create-channel.ui'; 17 | -------------------------------------------------------------------------------- /apps/web/src/features/create-project/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export * from './ui'; 17 | -------------------------------------------------------------------------------- /apps/web/src/features/create-project/ui/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export { default as CreateProject } from './create-project.ui'; 17 | -------------------------------------------------------------------------------- /apps/web/src/features/create-tenant/create-tenant-form.schema.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | import { z } from 'zod'; 17 | 18 | export const createTenantFormSchema = z.object({ 19 | siteName: z.string().trim().min(2).max(20), 20 | }); 21 | -------------------------------------------------------------------------------- /apps/web/src/features/create-tenant/create-tenant-form.type.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | import type { z } from 'zod'; 17 | 18 | import type { createTenantFormSchema } from './create-tenant-form.schema'; 19 | 20 | export type CreateTenant = z.infer; 21 | -------------------------------------------------------------------------------- /apps/web/src/features/create-tenant/default-super-account.constant.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export const DEFAULT_SUPER_ACCOUNT = { 17 | email: 'user@feedback.com', 18 | password: '12345678!', 19 | }; 20 | -------------------------------------------------------------------------------- /apps/web/src/features/create-tenant/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export { default as CreateTenantForm } from './create-tenant-form.ui'; 17 | -------------------------------------------------------------------------------- /apps/web/src/shared/constants/chart-colors.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export const CHART_FIVE_COLORS = [ 17 | 'var(--sky400)', 18 | 'var(--teal400)', 19 | 'var(--yellow400)', 20 | 'var(--orange500)', 21 | 'var(--rose400)', 22 | ]; 23 | -------------------------------------------------------------------------------- /apps/web/src/shared/constants/date-format.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export const DATE_FORMAT = 'YYYY-MM-DD'; 17 | export const DATE_TIME_FORMAT = 'YYYY-MM-DD HH:mm'; 18 | -------------------------------------------------------------------------------- /apps/web/src/shared/constants/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export * from './chart-colors'; 17 | export * from './date-format'; 18 | export * from './path'; 19 | export * from './issues'; 20 | -------------------------------------------------------------------------------- /apps/web/src/shared/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export * from './ui'; 17 | export * from './utils'; 18 | export * from './constants'; 19 | export * from './types'; 20 | export * from './lib'; 21 | -------------------------------------------------------------------------------- /apps/web/src/shared/types/date-range.type.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export type DateType = Date | null; 17 | export type DateRangeType = { startDate: DateType; endDate: DateType } | null; 18 | -------------------------------------------------------------------------------- /apps/web/src/shared/types/jwt.type.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export interface Jwt { 17 | accessToken: string; 18 | refreshToken: string; 19 | } 20 | -------------------------------------------------------------------------------- /apps/web/src/shared/types/page-with-layout.type.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | import type { NextPage } from 'next'; 17 | 18 | export type NextPageWithLayout

= NextPage & { 19 | getLayout?: (page: React.ReactElement

) => React.ReactNode; 20 | }; 21 | -------------------------------------------------------------------------------- /apps/web/src/shared/types/search-query.type.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export type SearchQuery = { 17 | key: string; 18 | value: unknown; 19 | condition: 'IS' | 'CONTAINS' | 'BETWEEN'; 20 | }; 21 | -------------------------------------------------------------------------------- /apps/web/src/shared/types/svg.d.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | declare module '*.svg' { 17 | import type * as React from 'react'; 18 | 19 | export const ReactComponent: React.FunctionComponent< 20 | React.ComponentProps<'svg'> & { title?: string } 21 | >; 22 | } 23 | -------------------------------------------------------------------------------- /apps/web/src/shared/ui/charts/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export { default as SimpleBarChart } from './simple-bar-chart'; 17 | export { default as SimpleLineChart } from './simple-line-chart'; 18 | export { default as SimplePieChart } from './simple-pie-chart'; 19 | -------------------------------------------------------------------------------- /apps/web/src/shared/ui/creation/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export { default as CreationLayout } from './creation-layout.ui'; 17 | export { default as CreationStepper } from './creation-stepper.ui'; 18 | -------------------------------------------------------------------------------- /apps/web/src/shared/ui/table-filter-popover/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export * from './table-filter-popover.type'; 17 | export { default as TableFilterPopover } from './table-filter-popover.ui'; 18 | -------------------------------------------------------------------------------- /apps/web/src/shared/utils/display-string.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export const displayString = (str?: string | null) => { 17 | str = (str ?? '').trim(); 18 | return str.length !== 0 ? str : '-'; 19 | }; 20 | -------------------------------------------------------------------------------- /apps/web/src/shared/utils/empty-function.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export const EMPTY_FUNCTION = () => { 17 | return; 18 | }; 19 | -------------------------------------------------------------------------------- /apps/web/src/shared/utils/first-letter-pascal.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export const firstLeterPascal = (str: string) => 17 | str.charAt(0).toUpperCase() + str.slice(1); 18 | -------------------------------------------------------------------------------- /apps/web/src/shared/utils/get-day-count.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | 17 | import dayjs from 'dayjs'; 18 | 19 | export const getDayCount = (from: Date, to: Date) => { 20 | const diff = dayjs(to).diff(dayjs(from), 'day'); 21 | return diff + 1; 22 | }; 23 | -------------------------------------------------------------------------------- /apps/web/src/shared/utils/is-object-equal.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export const isObjectEqual = (o1: T, o2: T): boolean => { 17 | return JSON.stringify(o1) === JSON.stringify(o2); 18 | }; 19 | -------------------------------------------------------------------------------- /apps/web/src/widgets/anonymous-layout/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export * from './ui'; 17 | -------------------------------------------------------------------------------- /apps/web/src/widgets/anonymous-layout/ui/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export { default as AnonymousLayout } from './anonymous-layout.ui'; 17 | -------------------------------------------------------------------------------- /apps/web/src/widgets/channel-settings/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export * from './ui'; 17 | -------------------------------------------------------------------------------- /apps/web/src/widgets/dashboard-card-list/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export * from './ui'; 17 | -------------------------------------------------------------------------------- /apps/web/src/widgets/dashboard-card-list/ui/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export { default as DashboardCardList } from './dashboard-card-list.ui'; 17 | -------------------------------------------------------------------------------- /apps/web/src/widgets/issue-table/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export * from './ui'; 17 | -------------------------------------------------------------------------------- /apps/web/src/widgets/issue-table/ui/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export { default as IssueTable } from './issue-table.ui'; 17 | -------------------------------------------------------------------------------- /apps/web/src/widgets/layout/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export * from './ui'; 17 | -------------------------------------------------------------------------------- /apps/web/src/widgets/layout/ui/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export { default as Layout } from './layout.ui'; 17 | -------------------------------------------------------------------------------- /apps/web/src/widgets/project-settings/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export * from './ui'; 17 | -------------------------------------------------------------------------------- /apps/web/src/widgets/setting-menu/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export * from './ui'; 17 | export * from './setting-menu.type'; 18 | -------------------------------------------------------------------------------- /apps/web/src/widgets/setting-menu/ui/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | 17 | export * from './tenant'; 18 | export { default as SettingsMenuList } from './settings-menu-list.ui'; 19 | -------------------------------------------------------------------------------- /apps/web/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@ufb/tsconfig/base.json", 3 | "compilerOptions": { 4 | "lib": ["ES2022", "dom", "dom.iterable"], 5 | "jsx": "preserve", 6 | "baseUrl": ".", 7 | "paths": { 8 | "@/*": ["./src/*"] 9 | }, 10 | "plugins": [{ "name": "next" }], 11 | "module": "esnext" 12 | }, 13 | "include": [".", ".next/types/**/*.ts"], 14 | "exclude": ["node_modules", "./*.js", "./*.mjs", "coverage"] 15 | } 16 | -------------------------------------------------------------------------------- /assets/01-feedback-tag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/line/abc-user-feedback/be66bba6d9f4144af3f0091a2ac4afae4ab40f0b/assets/01-feedback-tag.png -------------------------------------------------------------------------------- /assets/02-Issue-Kanban.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/line/abc-user-feedback/be66bba6d9f4144af3f0091a2ac4afae4ab40f0b/assets/02-Issue-Kanban.png -------------------------------------------------------------------------------- /assets/03-issue-tracker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/line/abc-user-feedback/be66bba6d9f4144af3f0091a2ac4afae4ab40f0b/assets/03-issue-tracker.png -------------------------------------------------------------------------------- /assets/04-single-signon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/line/abc-user-feedback/be66bba6d9f4144af3f0091a2ac4afae4ab40f0b/assets/04-single-signon.png -------------------------------------------------------------------------------- /assets/05-role-management.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/line/abc-user-feedback/be66bba6d9f4144af3f0091a2ac4afae4ab40f0b/assets/05-role-management.png -------------------------------------------------------------------------------- /assets/06-dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/line/abc-user-feedback/be66bba6d9f4144af3f0091a2ac4afae4ab40f0b/assets/06-dashboard.png -------------------------------------------------------------------------------- /assets/cover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/line/abc-user-feedback/be66bba6d9f4144af3f0091a2ac4afae4ab40f0b/assets/cover.png -------------------------------------------------------------------------------- /assets/main.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/line/abc-user-feedback/be66bba6d9f4144af3f0091a2ac4afae4ab40f0b/assets/main.png -------------------------------------------------------------------------------- /assets/sample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/line/abc-user-feedback/be66bba6d9f4144af3f0091a2ac4afae4ab40f0b/assets/sample.png -------------------------------------------------------------------------------- /packages/ufb-react/components.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://ui.shadcn.com/schema.json", 3 | "style": "default", 4 | "rsc": false, 5 | "tsx": true, 6 | "tailwind": { 7 | "config": "tailwind.config.js", 8 | "css": "", 9 | "baseColor": "neutral", 10 | "cssVariables": true, 11 | "prefix": "" 12 | }, 13 | "aliases": { 14 | "components": "@/components", 15 | "ui": "src/components", 16 | "utils": "@/lib/utils" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /packages/ufb-react/eslint.config.js: -------------------------------------------------------------------------------- 1 | import baseConfig from '@ufb/eslint-config/base'; 2 | import reactConfig from '@ufb/eslint-config/react'; 3 | 4 | /** @type {import('typescript-eslint').Config} */ 5 | export default [ 6 | { 7 | ignores: ['postcss.js'], 8 | }, 9 | ...baseConfig, 10 | ...reactConfig, 11 | ]; 12 | -------------------------------------------------------------------------------- /packages/ufb-react/postcss.js: -------------------------------------------------------------------------------- 1 | module.exports = { plugins: { tailwindcss: {}, autoprefixer: {} } }; 2 | -------------------------------------------------------------------------------- /packages/ufb-react/src/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export * from './components'; 17 | export * from './types'; 18 | export * from './constants'; 19 | -------------------------------------------------------------------------------- /packages/ufb-react/tailwindcss.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('tailwindcss').Config} */ 2 | export default { 3 | darkMode: ['class'], 4 | prefix: '', 5 | content: ['./src/**/*.tsx'], 6 | plugins: [require('@ufb/tailwindcss')], 7 | }; 8 | -------------------------------------------------------------------------------- /packages/ufb-react/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@ufb/tsconfig/internal-package.json", 3 | "compilerOptions": { 4 | "lib": ["dom", "dom.iterable", "ES2022"], 5 | "jsx": "preserve", 6 | "rootDir": "." 7 | }, 8 | "include": ["src"], 9 | "exclude": ["node_modules"] 10 | } 11 | -------------------------------------------------------------------------------- /packages/ufb-shared/eslint.config.js: -------------------------------------------------------------------------------- 1 | import baseConfig from '@ufb/eslint-config/base'; 2 | 3 | /** @type {import('typescript-eslint').Config} */ 4 | export default [ 5 | { 6 | ignores: ['dist/**'], 7 | }, 8 | ...baseConfig, 9 | ]; 10 | -------------------------------------------------------------------------------- /packages/ufb-shared/src/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | export * from './error-code.enum'; 17 | export * from './timezone'; 18 | -------------------------------------------------------------------------------- /packages/ufb-shared/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@ufb/tsconfig/internal-package.json", 3 | "include": ["src"], 4 | "exclude": ["node_modules"] 5 | } 6 | -------------------------------------------------------------------------------- /packages/ufb-tailwindcss/eslint.config.js: -------------------------------------------------------------------------------- 1 | import baseConfig from "@ufb/eslint-config/base"; 2 | 3 | /** @type {import('typescript-eslint').Config} */ 4 | export default [ 5 | { 6 | ignores: [], 7 | }, 8 | ...baseConfig, 9 | ]; 10 | -------------------------------------------------------------------------------- /packages/ufb-tailwindcss/index.d.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | import type plugin from "tailwindcss/plugin"; 17 | 18 | declare const tailwindcss: ReturnType; 19 | 20 | export default tailwindcss; 21 | -------------------------------------------------------------------------------- /packages/ufb-tailwindcss/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@ufb/tailwindcss", 3 | "version": "0.1.0", 4 | "private": true, 5 | "main": "index.js", 6 | "types": "index.d.ts", 7 | "typings": "index.d.ts", 8 | "files": [ 9 | "dist/*.js", 10 | "index.js", 11 | "index.d.ts" 12 | ], 13 | "scripts": { 14 | "dev": "pnpm build", 15 | "build": "node src/build", 16 | "clean": "rm -rf .turbo node_modules dist .cache" 17 | }, 18 | "devDependencies": { 19 | "@ufb/eslint-config": "workspace:*", 20 | "@ufb/prettier-config": "workspace:*", 21 | "@ufb/tsconfig": "workspace:^", 22 | "autoprefixer": "^10.4.19", 23 | "eslint": "catalog:", 24 | "glob": "^11.0.1", 25 | "postcss": "^8.4.38", 26 | "postcss-import": "^16.1.0", 27 | "postcss-js": "^4.0.1", 28 | "postcss-nesting": "^13.0.0", 29 | "prettier": "catalog:", 30 | "tailwindcss": "catalog:" 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /packages/ufb-tailwindcss/src/base/postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: [require('postcss-import'), require('tailwindcss/nesting')], 3 | }; 4 | -------------------------------------------------------------------------------- /packages/ufb-tailwindcss/src/borderRadius.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | 0: "0", 3 | 4: "calc(var(--rounded-base, 0px) + 0.25rem)", 4 | 6: "calc(var(--rounded-base, 0px) + 0.375rem)", 5 | 8: "calc(var(--rounded-base, 0px) + 0.5rem)", 6 | 12: "calc(var(--rounded-base, 0px) + 0.75rem)", 7 | 16: "calc(var(--rounded-base, 0px) + 1rem)", 8 | 24: "calc(var(--rounded-base, 0px) + 1.5rem)", 9 | full: "62.4375rem", 10 | }; 11 | -------------------------------------------------------------------------------- /packages/ufb-tailwindcss/src/boxShadow.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | sm: "0px 1px 2px 0px rgba(0, 0, 0, 0.05)", 3 | default: 4 | "0px 1px 3px 0px rgba(0, 0, 0, 0.10), 0px 1px 2px 0px rgba(0, 0, 0, 0.06)", 5 | md: "0px 4px 6px -1px rgba(0, 0, 0, 0.10), 0px 2px 4px -1px rgba(0, 0, 0, 0.06)", 6 | lg: "0px 10px 15px -3px rgba(0, 0, 0, 0.10), 0px 4px 6px -2px rgba(0, 0, 0, 0.05)", 7 | xl: "0px 20px 25px -5px rgba(0, 0, 0, 0.10), 0px 10px 10px -5px rgba(0, 0, 0, 0.04)", 8 | "2xl": "0px 25px 50px -12px rgba(0, 0, 0, 0.25)", 9 | inner: "0px 2px 4px 0px rgba(0, 0, 0, 0.06) inset", 10 | none: "none", 11 | }; 12 | -------------------------------------------------------------------------------- /packages/ufb-tailwindcss/src/build-functions/log.js: -------------------------------------------------------------------------------- 1 | const log = { 2 | info: (message) => 3 | console.log( 4 | `\x1b[36m[INFO]\x1b[0m ${new Date().toLocaleTimeString()} - ${message}`, 5 | ), 6 | success: (message) => 7 | console.log( 8 | `\x1b[32m[SUCCESS]\x1b[0m ${new Date().toLocaleTimeString()} - ${message}`, 9 | ), 10 | error: (error) => 11 | console.error( 12 | `\x1b[31m[ERROR]\x1b[0m ${new Date().toLocaleTimeString()} - ${error}`, 13 | ), 14 | step: (step, total, message) => 15 | console.log(`\x1b[35m[${step}/${total}]\x1b[0m \x1b[33m${message}\x1b[0m`), 16 | }; 17 | module.exports = log; 18 | -------------------------------------------------------------------------------- /packages/ufb-tailwindcss/src/components/icon.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | .icon { 17 | @apply pointer-events-none inline-flex text-inherit; 18 | } 19 | 20 | .icon-clickable { 21 | @apply pointer-events-auto cursor-pointer; 22 | } 23 | -------------------------------------------------------------------------------- /packages/ufb-tailwindcss/src/components/postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: [ 3 | require('postcss-import'), 4 | require('tailwindcss/nesting'), 5 | require('tailwindcss')('./src/components/tailwind.config.js'), 6 | ], 7 | }; 8 | -------------------------------------------------------------------------------- /packages/ufb-tailwindcss/src/components/toaster.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | .toaster { 17 | } 18 | 19 | .toast { 20 | @apply !absolute !left-0; 21 | } 22 | 23 | .toast-close { 24 | @apply order-1; 25 | } 26 | -------------------------------------------------------------------------------- /packages/ufb-tailwindcss/src/spacing.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | 5.5: "1.375rem", 3 | 9.5: "2.375rem", 4 | 13: "3.25rem", 5 | }; 6 | -------------------------------------------------------------------------------- /packages/ufb-tailwindcss/src/utilities/postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: [ 3 | require('postcss-import'), 4 | require('tailwindcss/nesting'), 5 | require('tailwindcss')('./src/utilities/tailwind.config.js'), 6 | ], 7 | }; 8 | -------------------------------------------------------------------------------- /packages/ufb-tailwindcss/src/utilities/radio.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | .radio-group-horizontal { 17 | @apply flex-row gap-4; 18 | } 19 | 20 | .radio-group-vertical { 21 | @apply flex-col gap-1; 22 | } 23 | -------------------------------------------------------------------------------- /packages/ufb-tailwindcss/src/utilities/tooltip.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | .tooltip-text-left { 17 | @apply text-left; 18 | } 19 | 20 | .tooltip-text-center { 21 | @apply text-center; 22 | } 23 | 24 | .tooltip-text-right { 25 | @apply text-right; 26 | } 27 | -------------------------------------------------------------------------------- /packages/ufb-tailwindcss/src/utilities/utilities.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 LY Corporation 3 | * 4 | * LY Corporation licenses this file to you under the Apache License, 5 | * version 2.0 (the "License"); you may not use this file except in compliance 6 | * with the License. You may obtain a copy of the License at: 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations 14 | * under the License. 15 | */ 16 | @import url("tailwindcss/utilities"); 17 | -------------------------------------------------------------------------------- /pnpm-workspace.yaml: -------------------------------------------------------------------------------- 1 | packages: 2 | - apps/* 3 | - packages/* 4 | - tooling/* 5 | 6 | catalog: 7 | eslint: ^9.27.0 8 | prettier: ^3.4.2 9 | tailwindcss: ^3.4.15 10 | typescript: ^5.7.3 11 | -------------------------------------------------------------------------------- /renovate.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://docs.renovatebot.com/renovate-schema.json", 3 | "extends": ["config:recommended"], 4 | "packageRules": [ 5 | { 6 | "matchPackagePatterns": ["^@ufb/"], 7 | "enabled": false 8 | }, 9 | { 10 | "matchManagers": ["docker-compose"], 11 | "enabled": false 12 | } 13 | ], 14 | "updateInternalDeps": true, 15 | "rangeStrategy": "bump", 16 | "automerge": true, 17 | "ignorePaths": [ 18 | "**/.github/workflows/e2e-test.yml", 19 | "**/.github/workflows/integration-test.yml", 20 | "**/.github/workflows/publish-api-docs.yml" 21 | ], 22 | "baseBranches": ["dev"] 23 | } 24 | -------------------------------------------------------------------------------- /tooling/eslint-plugin-header/index.js: -------------------------------------------------------------------------------- 1 | import header from "./src/rules/header.js"; 2 | 3 | export default { 4 | rules: { header }, 5 | rulesConfig: { header: 0 }, 6 | }; 7 | -------------------------------------------------------------------------------- /tooling/eslint-plugin-header/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@ufb/eslint-plugin-header", 3 | "private": true, 4 | "type": "module", 5 | "main": "./index.js" 6 | } 7 | -------------------------------------------------------------------------------- /tooling/eslint-plugin-header/src/comment-parser.js: -------------------------------------------------------------------------------- 1 | export function commentParser(text) { 2 | text = text.trim(); 3 | 4 | if (text.substr(0, 2) === '//') { 5 | return [ 6 | 'line', 7 | text.split(/\r?\n/).map(function (line) { 8 | return line.substr(2); 9 | }), 10 | ]; 11 | } else if (text.substr(0, 2) === '/*' && text.substr(-2) === '*/') { 12 | return ['block', text.substring(2, text.length - 2)]; 13 | } else { 14 | throw new Error( 15 | 'Could not parse comment file: the file must contain either just line comments (//) or a single block comment (/* ... */)', 16 | ); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /tooling/eslint/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@ufb/tsconfig/base.json", 3 | "include": ["."], 4 | "exclude": ["node_modules"] 5 | } 6 | -------------------------------------------------------------------------------- /tooling/github/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@ufb/github" 3 | } 4 | -------------------------------------------------------------------------------- /tooling/github/setup/action.yml: -------------------------------------------------------------------------------- 1 | name: "Setup and install" 2 | description: "Common setup steps for Actions" 3 | 4 | runs: 5 | using: composite 6 | steps: 7 | - uses: pnpm/action-setup@v4 8 | - uses: actions/setup-node@v4 9 | with: 10 | node-version-file: ".nvmrc" 11 | cache: "pnpm" 12 | 13 | - shell: bash 14 | run: pnpm add -g turbo 15 | 16 | - shell: bash 17 | run: pnpm install 18 | -------------------------------------------------------------------------------- /tooling/prettier/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@ufb/prettier-config", 3 | "version": "0.1.0", 4 | "private": true, 5 | "type": "module", 6 | "exports": { 7 | ".": "./index.js" 8 | }, 9 | "scripts": { 10 | "clean": "git clean -xdf .cache .turbo node_modules", 11 | "format": "prettier --check . --ignore-path ../../.gitignore", 12 | "typecheck": "tsc --noEmit" 13 | }, 14 | "dependencies": { 15 | "@ianvs/prettier-plugin-sort-imports": "^4.4.1", 16 | "prettier": "catalog:", 17 | "prettier-plugin-tailwindcss": "^0.6.11" 18 | }, 19 | "devDependencies": { 20 | "@types/node": "22.15.23", 21 | "@ufb/tsconfig": "workspace:*", 22 | "typescript": "catalog:" 23 | }, 24 | "prettier": "@ufb/prettier-config" 25 | } 26 | -------------------------------------------------------------------------------- /tooling/prettier/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@ufb/tsconfig/base.json", 3 | "include": ["."], 4 | "exclude": ["node_modules"] 5 | } 6 | -------------------------------------------------------------------------------- /tooling/typescript/base.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/tsconfig", 3 | "compilerOptions": { 4 | "esModuleInterop": true, 5 | "skipLibCheck": true, 6 | "target": "ES2022", 7 | "lib": ["ES2022"], 8 | "allowJs": true, 9 | "resolveJsonModule": true, 10 | "moduleDetection": "force", 11 | "isolatedModules": true, 12 | "incremental": true, 13 | "disableSourceOfProjectReferenceRedirect": true, 14 | "tsBuildInfoFile": "${configDir}/.cache/tsbuildinfo.json", 15 | "strict": true, 16 | "noUncheckedIndexedAccess": true, 17 | "checkJs": true, 18 | "module": "Preserve", 19 | "moduleResolution": "Bundler", 20 | "noEmit": true 21 | }, 22 | "exclude": ["node_modules", "build", "dist", ".next"] 23 | } 24 | -------------------------------------------------------------------------------- /tooling/typescript/internal-package.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/tsconfig", 3 | "extends": "./base.json", 4 | "compilerOptions": { 5 | "declaration": true, 6 | "declarationMap": true, 7 | "emitDeclarationOnly": true, 8 | "noEmit": false, 9 | "outDir": "${configDir}/dist" 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /tooling/typescript/nestjs.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/tsconfig", 3 | "compilerOptions": { 4 | "module": "commonjs", 5 | "declaration": true, 6 | "removeComments": true, 7 | "emitDecoratorMetadata": true, 8 | "experimentalDecorators": true, 9 | "allowSyntheticDefaultImports": true, 10 | "target": "ES2023", 11 | "sourceMap": true, 12 | "baseUrl": "./", 13 | "incremental": true, 14 | "esModuleInterop": true, 15 | "forceConsistentCasingInFileNames": true, 16 | "skipLibCheck": true, 17 | "outDir": "./dist", 18 | "strictNullChecks": true 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /tooling/typescript/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@ufb/tsconfig", 3 | "private": true, 4 | "version": "0.1.0", 5 | "files": [ 6 | "*.json" 7 | ] 8 | } 9 | --------------------------------------------------------------------------------