Add Privacy Policy Module and Controller

This commit is contained in:
faris Aljohari
2025-01-16 23:32:42 -06:00
parent ddacefe055
commit dc11133057
8 changed files with 122 additions and 0 deletions

View File

@ -413,6 +413,16 @@ export class ControllerRoute {
'This endpoint retrieves the terms and conditions for the application.'; 'This endpoint retrieves the terms and conditions for the application.';
}; };
}; };
static PRIVACY_POLICY = class {
public static readonly ROUTE = 'policy';
static ACTIONS = class {
public static readonly FETCH_POLICY_SUMMARY = 'Fetch Privacy Policy';
public static readonly FETCH_POLICY_DESCRIPTION =
'This endpoint retrieves the privacy policy for the application.';
};
};
static GROUP = class { static GROUP = class {
public static readonly ROUTE = 'group'; public static readonly ROUTE = 'group';

View File

@ -0,0 +1,37 @@
<div>
<p><strong>Syncrow Mobile Privacy Policy</strong></p>
<p>
Effective Date: 26/06/2022<br />
Updated: 26/06/2022
</p>
<p>
Syncrow and subsidiaries (“we”, “us”, “our”, “Syncrow”) are committed to
protecting your privacy. This Privacy Policy (“Policy”) describes our
practices in connection with information privacy on Personal Data we process
through your individual use of the following services, products, and related
mobile applications (collectively, the “Products”):
</p>
<ul>
<li>Syncrow Mobile Application</li>
</ul>
<p>
Before you use our Products, please carefully read through this Policy and
understand our purposes and practices of collection, processing of your
Personal Data, including how we use, store, share and transfer Personal
Data. In the Policy you will also find ways to execute your rights of
access, update, delete or protect your Personal Data.
</p>
<p>
When you accept this Policy when you register with your Personal Data, or if
you start to use our Products and does not expressly object to the contents
of this Policy, we will consider that you fully understand and agree with
this Policy. If you have any questions regarding this Policy, please do not
hesitate to contact us via:
</p>
<p>
For other branded mobile applications powered by Syncrow, our Clients
control all the Personal Data collected through our Products. We collect the
information under the direction of our Clients and the processing of such
information.
</p>
</div>

View File

@ -27,6 +27,7 @@ import { InviteUserModule } from './invite-user/invite-user.module';
import { PermissionModule } from './permission/permission.module'; import { PermissionModule } from './permission/permission.module';
import { RoleModule } from './role/role.module'; import { RoleModule } from './role/role.module';
import { TermsConditionsModule } from './terms-conditions/terms-conditions.module'; import { TermsConditionsModule } from './terms-conditions/terms-conditions.module';
import { PrivacyPolicyModule } from './privacy-policy/privacy-policy.module';
@Module({ @Module({
imports: [ imports: [
ConfigModule.forRoot({ ConfigModule.forRoot({
@ -57,6 +58,7 @@ import { TermsConditionsModule } from './terms-conditions/terms-conditions.modul
PermissionModule, PermissionModule,
RoleModule, RoleModule,
TermsConditionsModule, TermsConditionsModule,
PrivacyPolicyModule,
], ],
providers: [ providers: [
{ {

View File

@ -0,0 +1 @@
export * from './privacy-policy.controller';

View File

@ -0,0 +1,29 @@
import { Controller, Get, HttpStatus } from '@nestjs/common';
import { ApiOperation, ApiTags } from '@nestjs/swagger';
import { EnableDisableStatusEnum } from '@app/common/constants/days.enum';
import { ControllerRoute } from '@app/common/constants/controller-route'; // Assuming this is where the routes are defined
import { PrivacyPolicyService } from '../services';
@ApiTags('Privacy Policy Module')
@Controller({
version: EnableDisableStatusEnum.ENABLED,
path: ControllerRoute.PRIVACY_POLICY.ROUTE,
})
export class PrivacyPolicyController {
constructor(private readonly privacyPolicyService: PrivacyPolicyService) {}
@Get()
@ApiOperation({
summary: ControllerRoute.PRIVACY_POLICY.ACTIONS.FETCH_POLICY_SUMMARY,
description:
ControllerRoute.PRIVACY_POLICY.ACTIONS.FETCH_POLICY_DESCRIPTION,
})
async fetchPrivacyPolicy() {
const htmlContent = await this.privacyPolicyService.fetchPrivacyPolicy();
return {
statusCode: HttpStatus.OK,
message: 'Privacy policy fetched successfully',
data: htmlContent,
};
}
}

View File

@ -0,0 +1,12 @@
import { DeviceRepositoryModule } from '@app/common/modules/device';
import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
import { PrivacyPolicyController } from './controllers';
import { PrivacyPolicyService } from './services';
@Module({
imports: [ConfigModule, DeviceRepositoryModule],
controllers: [PrivacyPolicyController],
providers: [PrivacyPolicyService],
})
export class PrivacyPolicyModule {}

View File

@ -0,0 +1 @@
export * from './privacy-policy.service';

View File

@ -0,0 +1,30 @@
import { Injectable } from '@nestjs/common';
import * as fs from 'fs';
import * as path from 'path';
@Injectable()
export class PrivacyPolicyService {
async fetchPrivacyPolicy(): Promise<string> {
const projectRoot = process.cwd();
const filePath = path.join(
projectRoot,
'libs',
'common',
'src',
'constants',
'privacy-policy.html',
);
// Ensure the file exists
if (!fs.existsSync(filePath)) {
throw new Error(`File not found: ${filePath}`);
}
let htmlContent = fs.readFileSync(filePath, 'utf-8');
htmlContent = htmlContent.replace(/(\r\n|\n|\r)/gm, ''); // Removes newlines
return htmlContent;
}
}