Skip to content

Commit

Permalink
Merge pull request #158 from line/dev
Browse files Browse the repository at this point in the history
release: 4.2405.35
  • Loading branch information
h4l-yup committed Feb 1, 2024
2 parents 9619e95 + f6a8f96 commit b2aaf7c
Show file tree
Hide file tree
Showing 518 changed files with 1,422 additions and 1,831 deletions.
13 changes: 11 additions & 2 deletions .github/workflows/test-on-pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,22 @@ jobs:
- name: Install Dependencies
run: yarn install --immutable --immutable-cache --check-cache

- name: setup environment variables
- name: setup environment variables (with opensearch)
run: |
echo "JWT_SECRET=${{ vars.TEST_JWT_SECRET }}" >> ./apps/api/.env.test
echo "OS_USE=${{ vars.TEST_OS_USE }}" >> ./apps/api/.env.test
echo "OS_USE=true" >> ./apps/api/.env.test
echo "OS_NODE=http://localhost:9200" >> ./apps/api/.env.test
echo "OS_USERNAME=''" >> ./apps/api/.env.test
echo "OS_PASSWORD=''" >> ./apps/api/.env.test
- name: Run Tests
run: yarn test

- name: setup environment variables (without opensearch)
run: |
rm ./apps/api/.env.test
echo "JWT_SECRET=${{ vars.TEST_JWT_SECRET }}" >> ./apps/api/.env.test
echo "OS_USE=false" >> ./apps/api/.env.test
- name: Run Tests
run: yarn test
18 changes: 10 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,19 @@

ABC User Feedback is a standalone web application that manages Voice of Customer (VoC) data. It allows you to gather and sort feedback from your customers. The product is being applied and used in services worth 10 million MAU.

![sample image](./assets/sample.png)
![sample image](./assets/main.png)

## Features

ABC User Feedback provides the following features:

- You can customize the data fields to match your questionnaire.
- You can assign tags to each feedback to categorize them by topic.
- The Issue feature has a status indicator that lets you use it as a simple issue tracker. You can also link each issue to a ticket in your own issue tracker system.
- Authentication offers OAuth to accommodate enterprise-level single sign-on (SSO) requirements.
- Role Based Access Control (RBAC).
- Admin UI with an attractive dashboard.
![data field image](./assets/01-data-field.png)
![feedback tag image](./assets/02-feedback-tag.png)
![issue tracker image](./assets/03-issue-tracker.png)
![single sign-on image](./assets/04-single-signon.png)
![role management image](./assets/05-role-management.png)
![dashboard image](./assets/06-dashboard.png)


## Getting Started

Expand All @@ -34,7 +35,7 @@ The frontend is built with NextJS and the backend is built with NestJS. We provi
**Optional**

- SMTP - for mail verification during making accounts
- [OpenSearch v7](https://opensearch.org/) - for performance on searching feedbacks
- [OpenSearch v7](https://opensearch.org/) - for performance on searching feedback

You can use [docker-compose.infra.yml](/docker/docker-compose.infra.yml) file for requirements.

Expand Down Expand Up @@ -150,3 +151,4 @@ under the License.
```

See [LICENSE](./LICENSE) for more details.

2 changes: 1 addition & 1 deletion apps/api/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ npm run migration:run
| SMTP_BASE_URL | default UserFeedback URL for mail to be redirected | http://localhost:3000 |
| APP_PORT | the post that the server is running on | 4000 |
| APP_ADDRESS | the address that the server is running on | 0.0.0.0 |
| OS_USE | flag for using opensearch (for better performance on searching feedbacks) | false |
| OS_USE | flag for using opensearch (for better performance on searching feedback) | false |
| OS_NODE | opensearch node url | http://localhost:9200 |
| OS_USERNAME | opensearch username if exists | |
| OS_PASSWORD | opensearch password if exists | |
Expand Down
2 changes: 1 addition & 1 deletion apps/api/jest.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ module.exports = {
collectCoverageFrom: ['**/*.(t|j)s'],
testEnvironment: 'node',
moduleNameMapper: {
'^@/(.*)$': ['<rootDir>/$1'],
'^@/(.*)$': ['<rootDir>/$2'],
},
transform: {
'^.+\\.(t|j)s$': ['@swc-node/jest'],
Expand Down
10 changes: 5 additions & 5 deletions apps/api/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -29,12 +29,12 @@
"@aws-sdk/s3-presigned-post": "^3.465.0",
"@fastify/static": "^6.11.2",
"@nestjs-modules/mailer": "^1.9.1",
"@nestjs/axios": "^3.0.0",
"@nestjs/axios": "^3.0.1",
"@nestjs/common": "^10.2.7",
"@nestjs/config": "^3.1.1",
"@nestjs/core": "^10.2.7",
"@nestjs/jwt": "^10.1.1",
"@nestjs/passport": "^10.0.2",
"@nestjs/passport": "^10.0.3",
"@nestjs/platform-express": "^10.2.7",
"@nestjs/platform-fastify": "^10.2.7",
"@nestjs/schedule": "^4.0.0",
Expand All @@ -48,9 +48,9 @@
"axios": "^1.6.0",
"bcrypt": "^5.1.1",
"class-transformer": "^0.5.1",
"class-validator": "^0.14.0",
"class-validator": "^0.14.1",
"exceljs": "^4.4.0",
"fast-csv": "^4.3.6",
"fast-csv": "^5.0.0",
"joi": "^17.11.0",
"mysql2": "^3.6.2",
"nestjs-cls": "^3.6.0",
Expand Down Expand Up @@ -79,7 +79,7 @@
"@swc-node/jest": "^1.6.8",
"@swc/core": "^1.3.95",
"@types/bcrypt": "^5.0.1",
"@types/express": "^4.17.20",
"@types/express": "^4.17.21",
"@types/jest": "^29.5.6",
"@types/node": "20.8.8",
"@types/nodemailer": "^6.4.13",
Expand Down
46 changes: 23 additions & 23 deletions apps/api/src/app.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,28 +33,28 @@ import {
opensearchConfigSchema,
} from './configs/opensearch.config';
import { smtpConfig, smtpConfigSchema } from './configs/smtp.config';
import { AuthModule } from './domains/auth/auth.module';
import { ChannelModule } from './domains/channel/channel/channel.module';
import { FieldModule } from './domains/channel/field/field.module';
import { OptionModule } from './domains/channel/option/option.module';
import { ExternalModule } from './domains/external/external.module';
import { FeedbackModule } from './domains/feedback/feedback.module';
import { HealthModule } from './domains/health/health.module';
import { HistoryModule } from './domains/history/history.module';
import { MigrationModule } from './domains/migration/migration.module';
import { ApiKeyModule } from './domains/project/api-key/api-key.module';
import { IssueTrackerModule } from './domains/project/issue-tracker/issue-tracker.module';
import { IssueModule } from './domains/project/issue/issue.module';
import { MemberModule } from './domains/project/member/member.module';
import { ProjectModule } from './domains/project/project/project.module';
import { RoleModule } from './domains/project/role/role.module';
import { FeedbackIssueStatisticsModule } from './domains/statistics/feedback-issue/feedback-issue-statistics.module';
import { FeedbackStatisticsModule } from './domains/statistics/feedback/feedback-statistics.module';
import { IssueStatisticsModule } from './domains/statistics/issue/issue-statistics.module';
import { TenantModule } from './domains/tenant/tenant.module';
import { UserModule } from './domains/user/user.module';
import { AuthModule } from './domains/admin/auth/auth.module';
import { ChannelModule } from './domains/admin/channel/channel/channel.module';
import { FieldModule } from './domains/admin/channel/field/field.module';
import { OptionModule } from './domains/admin/channel/option/option.module';
import { FeedbackModule } from './domains/admin/feedback/feedback.module';
import { HistoryModule } from './domains/admin/history/history.module';
import { ApiKeyModule } from './domains/admin/project/api-key/api-key.module';
import { IssueTrackerModule } from './domains/admin/project/issue-tracker/issue-tracker.module';
import { IssueModule } from './domains/admin/project/issue/issue.module';
import { MemberModule } from './domains/admin/project/member/member.module';
import { ProjectModule } from './domains/admin/project/project/project.module';
import { RoleModule } from './domains/admin/project/role/role.module';
import { FeedbackIssueStatisticsModule } from './domains/admin/statistics/feedback-issue/feedback-issue-statistics.module';
import { FeedbackStatisticsModule } from './domains/admin/statistics/feedback/feedback-statistics.module';
import { IssueStatisticsModule } from './domains/admin/statistics/issue/issue-statistics.module';
import { TenantModule } from './domains/admin/tenant/tenant.module';
import { UserModule } from './domains/admin/user/user.module';
import { APIModule } from './domains/api/api.module';
import { HealthModule } from './domains/operation/health/health.module';
import { MigrationModule } from './domains/operation/migration/migration.module';

const domainModules = [
export const domainModules = [
AuthModule,
ChannelModule,
FieldModule,
Expand All @@ -74,8 +74,8 @@ const domainModules = [
FeedbackStatisticsModule,
IssueStatisticsModule,
FeedbackIssueStatisticsModule,
ExternalModule,
];
APIModule,
] as any[];

@Module({
imports: [
Expand Down
2 changes: 1 addition & 1 deletion apps/api/src/common/repositories/dtos/get-data.dto.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
* under the License.
*/
import { PaginationDto } from '@/common/dtos';
import type { OsQueryDto } from '@/domains/feedback/dtos/os-query.dto';
import type { OsQueryDto } from '@/domains/admin/feedback/dtos/os-query.dto';

export class GetDataDto extends PaginationDto {
index: string;
Expand Down
2 changes: 1 addition & 1 deletion apps/api/src/common/repositories/dtos/scroll.dto.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
* License for the specific language governing permissions and limitations
* under the License.
*/
import type { OsQueryDto } from '@/domains/feedback/dtos/os-query.dto';
import type { OsQueryDto } from '@/domains/admin/feedback/dtos/os-query.dto';

export class ScrollDto {
index: string;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ import { UseEmailGuard } from './guards/use-email.guard';
import { UseOAuthGuard } from './guards/use-oauth.guard';

@ApiTags('auth')
@Controller('auth')
@Controller('/admin/auth')
export class AuthController {
constructor(private readonly authService: AuthService) {}

Expand Down
File renamed without changes.
Loading

0 comments on commit b2aaf7c

Please sign in to comment.