mirror of
https://github.com/SyncrowIOT/backend.git
synced 2025-07-14 09:57:28 +00:00
Add Terms and Conditions Module
This commit is contained in:
@ -404,6 +404,15 @@ export class ControllerRoute {
|
||||
'This endpoint adds a new user role to the system based on the provided role data.';
|
||||
};
|
||||
};
|
||||
static TERMS_AND_CONDITIONS = class {
|
||||
public static readonly ROUTE = 'terms';
|
||||
|
||||
static ACTIONS = class {
|
||||
public static readonly FETCH_TERMS_SUMMARY = 'Fetch Terms and Conditions';
|
||||
public static readonly FETCH_TERMS_DESCRIPTION =
|
||||
'This endpoint retrieves the terms and conditions for the application.';
|
||||
};
|
||||
};
|
||||
static GROUP = class {
|
||||
public static readonly ROUTE = 'group';
|
||||
|
||||
|
44
libs/common/src/constants/terms-and-conditions.html
Normal file
44
libs/common/src/constants/terms-and-conditions.html
Normal file
@ -0,0 +1,44 @@
|
||||
<div>
|
||||
<p>User Agreement</p>
|
||||
<p>Terms and Conditions</p>
|
||||
<p><span>Last updated:</span> {{lastUpdated}}</p>
|
||||
<p>
|
||||
Please read these Terms and Conditions ("Terms", "Terms and Conditions")
|
||||
carefully before using the
|
||||
<a href="{{websiteUrl}}">{{websiteUrl}}</a> website and the {{mobileApp}}
|
||||
mobile application (the "Service") operated by {{companyName}}.
|
||||
</p>
|
||||
<p>
|
||||
Your access to and use of the Service is conditioned on your acceptance of
|
||||
and compliance with these Terms. These Terms apply to all visitors, users,
|
||||
and others who access or use the Service.
|
||||
</p>
|
||||
<p>Content</p>
|
||||
<p>
|
||||
Our Service allows you to post, link, store, share and otherwise make
|
||||
available certain information, text, graphics, videos, or other material
|
||||
("Content"). You are responsible for the Content you post.
|
||||
</p>
|
||||
<p>Links To Other Websites</p>
|
||||
<p>
|
||||
Our Service may contain links to third-party websites or services that are
|
||||
not owned or controlled by {{companyName}}.
|
||||
</p>
|
||||
<p>
|
||||
{{companyName}} has no control over, and assumes no responsibility for, the
|
||||
content, privacy policies, or practices of any third-party websites or
|
||||
services.
|
||||
</p>
|
||||
<p>Changes</p>
|
||||
<p>
|
||||
We reserve the right, at our sole discretion, to modify or replace these
|
||||
Terms at any time. If a revision is material, we will try to provide at
|
||||
least 30 days' notice prior to any new terms taking effect. What constitutes
|
||||
a material change will be determined at our sole discretion.
|
||||
</p>
|
||||
<p>Contact Us</p>
|
||||
<p>
|
||||
If you have any questions about these Terms, please
|
||||
<a href="mailto:{{contactEmail}}">contact us</a>.
|
||||
</p>
|
||||
</div>
|
29
libs/common/src/constants/terms-conditions.ts
Normal file
29
libs/common/src/constants/terms-conditions.ts
Normal file
@ -0,0 +1,29 @@
|
||||
export const TERMS_AND_CONDITIONS = {
|
||||
title: 'User Agreement',
|
||||
content: `<html>
|
||||
<body>
|
||||
<div>
|
||||
<p>User Agreement</p>
|
||||
<p>Terms and Conditions</p>
|
||||
<p><span>Last updated:</span> <em>25/01/2025</em></p>
|
||||
<p>Please read these Terms and Conditions ("Terms", "Terms and Conditions") carefully before using the
|
||||
<a href="http://www.mywebsite.com">http://www.mywebsite.com</a> website and the My Mobile App
|
||||
(change this) mobile application (the "Service") operated by My Company (change this) ("us", "we", or "our").
|
||||
</p>
|
||||
<p>Your access to and use of the Service is conditioned on your acceptance of and compliance with these Terms.
|
||||
These Terms apply to all visitors, users and others who access or use the Service.
|
||||
</p>
|
||||
<p>By accessing or using the Service you agree to be bound by these Terms. If you disagree with any part of the terms then you may not access the Service.</p>
|
||||
<p>Content</p>
|
||||
<p>Our Service allows you to post, link, store, share and otherwise make available certain information, text, graphics, videos, or other material ("Content"). You are responsible for the Content you post.</p>
|
||||
<p>Links To Other Websites</p>
|
||||
<p>Our Service may contain links to third-party websites or services that are not owned or controlled by My Company (change this).</p>
|
||||
<p>My Company (change this) has no control over, and assumes no responsibility for, the content, privacy policies, or practices of any third-party websites or services. You further acknowledge and agree that My Company (change this) shall not be responsible or liable, directly or indirectly, for any damage or loss caused or alleged to be caused by or in connection with use of or reliance on any such content, goods, or services available on or through any such websites or services.</p>
|
||||
<p>Changes</p>
|
||||
<p>We reserve the right, at our sole discretion, to modify or replace these Terms at any time. If a revision is material, we will try to provide at least 30 (change this) days' notice prior to any new terms taking effect. What constitutes a material change will be determined at our sole discretion.</p>
|
||||
<p>Contact Us</p>
|
||||
<p>If you have any questions about these Terms, please <a href="mailto:contact@mycompany.com">contact us</a>.</p>
|
||||
</div>
|
||||
</body>
|
||||
</html>`,
|
||||
};
|
@ -26,6 +26,7 @@ import { SpaceModelModule } from './space-model';
|
||||
import { InviteUserModule } from './invite-user/invite-user.module';
|
||||
import { PermissionModule } from './permission/permission.module';
|
||||
import { RoleModule } from './role/role.module';
|
||||
import { TermsConditionsModule } from './terms-conditions/terms-conditions.module';
|
||||
@Module({
|
||||
imports: [
|
||||
ConfigModule.forRoot({
|
||||
@ -55,6 +56,7 @@ import { RoleModule } from './role/role.module';
|
||||
ProjectModule,
|
||||
PermissionModule,
|
||||
RoleModule,
|
||||
TermsConditionsModule,
|
||||
],
|
||||
providers: [
|
||||
{
|
||||
|
1
src/terms-conditions/controllers/index.ts
Normal file
1
src/terms-conditions/controllers/index.ts
Normal file
@ -0,0 +1 @@
|
||||
export * from './terms-conditions.controller';
|
@ -0,0 +1,32 @@
|
||||
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 { TermsAndConditionsService } from '../services';
|
||||
|
||||
@ApiTags('Terms & Conditions Module')
|
||||
@Controller({
|
||||
version: EnableDisableStatusEnum.ENABLED,
|
||||
path: ControllerRoute.TERMS_AND_CONDITIONS.ROUTE, // use the static route constant
|
||||
})
|
||||
export class TermsConditionsController {
|
||||
constructor(
|
||||
private readonly termsAndConditionsService: TermsAndConditionsService,
|
||||
) {}
|
||||
|
||||
@Get()
|
||||
@ApiOperation({
|
||||
summary: ControllerRoute.TERMS_AND_CONDITIONS.ACTIONS.FETCH_TERMS_SUMMARY,
|
||||
description:
|
||||
ControllerRoute.TERMS_AND_CONDITIONS.ACTIONS.FETCH_TERMS_DESCRIPTION,
|
||||
})
|
||||
async fetchTermsAndConditions() {
|
||||
const htmlContent =
|
||||
await this.termsAndConditionsService.fetchTermsAndConditions();
|
||||
return {
|
||||
statusCode: HttpStatus.OK,
|
||||
message: 'Terms and conditions fetched successfully',
|
||||
data: htmlContent,
|
||||
};
|
||||
}
|
||||
}
|
1
src/terms-conditions/services/index.ts
Normal file
1
src/terms-conditions/services/index.ts
Normal file
@ -0,0 +1 @@
|
||||
export * from './terms-conditions.service';
|
51
src/terms-conditions/services/terms-conditions.service.ts
Normal file
51
src/terms-conditions/services/terms-conditions.service.ts
Normal file
@ -0,0 +1,51 @@
|
||||
import { Injectable } from '@nestjs/common';
|
||||
import * as fs from 'fs';
|
||||
import * as path from 'path';
|
||||
|
||||
@Injectable()
|
||||
export class TermsAndConditionsService {
|
||||
async fetchTermsAndConditions(): Promise<string> {
|
||||
// Use process.cwd() to get the current working directory (project root)
|
||||
const projectRoot = process.cwd();
|
||||
|
||||
// Dynamically build the path to the terms-and-conditions.html file from the root
|
||||
const filePath = path.join(
|
||||
projectRoot,
|
||||
'libs',
|
||||
'common',
|
||||
'src',
|
||||
'constants',
|
||||
'terms-and-conditions.html',
|
||||
);
|
||||
|
||||
// Ensure the file exists
|
||||
if (!fs.existsSync(filePath)) {
|
||||
throw new Error(`File not found: ${filePath}`);
|
||||
}
|
||||
|
||||
// Read the HTML content from the file
|
||||
let htmlContent = fs.readFileSync(filePath, 'utf-8');
|
||||
|
||||
// Optionally, remove newlines or excess white spaces using a regular expression
|
||||
htmlContent = htmlContent.replace(/(\r\n|\n|\r)/gm, ''); // Removes newlines
|
||||
|
||||
// Define dynamic values
|
||||
const dynamicValues = {
|
||||
lastUpdated: '25/01/2025',
|
||||
websiteUrl: 'http://www.mywebsite.com',
|
||||
mobileApp: 'My Mobile App',
|
||||
companyName: 'My Company',
|
||||
contactEmail: 'contact@mycompany.com',
|
||||
};
|
||||
|
||||
// Replace placeholders in the HTML with dynamic values
|
||||
htmlContent = htmlContent
|
||||
.replace(/{{lastUpdated}}/g, dynamicValues.lastUpdated)
|
||||
.replace(/{{websiteUrl}}/g, dynamicValues.websiteUrl)
|
||||
.replace(/{{mobileApp}}/g, dynamicValues.mobileApp)
|
||||
.replace(/{{companyName}}/g, dynamicValues.companyName)
|
||||
.replace(/{{contactEmail}}/g, dynamicValues.contactEmail);
|
||||
|
||||
return htmlContent;
|
||||
}
|
||||
}
|
12
src/terms-conditions/terms-conditions.module.ts
Normal file
12
src/terms-conditions/terms-conditions.module.ts
Normal file
@ -0,0 +1,12 @@
|
||||
import { DeviceRepositoryModule } from '@app/common/modules/device';
|
||||
import { Module } from '@nestjs/common';
|
||||
import { ConfigModule } from '@nestjs/config';
|
||||
import { TermsConditionsController } from './controllers';
|
||||
import { TermsAndConditionsService } from './services';
|
||||
|
||||
@Module({
|
||||
imports: [ConfigModule, DeviceRepositoryModule],
|
||||
controllers: [TermsConditionsController],
|
||||
providers: [TermsAndConditionsService],
|
||||
})
|
||||
export class TermsConditionsModule {}
|
Reference in New Issue
Block a user