Skip to content

Commit 466125a

Browse files
Merge pull request #265 from OthmanImam/feat/SettingsModule
Feat/settings module
2 parents 57b04e7 + 965a620 commit 466125a

File tree

12 files changed

+196
-0
lines changed

12 files changed

+196
-0
lines changed

backend/src/app.module.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { ConfigModule, ConfigService } from '@nestjs/config';
44
import { AppController } from './app.controller';
55
import { AppService } from './app.service';
66
import { AssetCategoriesModule } from './asset-categories/asset-categories.module';
7+
import { SettingsModule } from './settings/settings.module';
78
import { AssetCategory } from './asset-categories/asset-category.entity';
89
import { DepartmentsModule } from './departments/departments.module';
910
import { Department } from './departments/department.entity';
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { IsString } from 'class-validator';
2+
3+
export class CreateSettingsDto {
4+
@IsString()
5+
defaultCurrency: string;
6+
7+
@IsString()
8+
timezone: string;
9+
10+
@IsString()
11+
depreciationMethod: string;
12+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import { IsOptional, IsString } from 'class-validator';
2+
3+
export class UpdateSettingsDto {
4+
@IsOptional()
5+
@IsString()
6+
defaultCurrency?: string;
7+
8+
@IsOptional()
9+
@IsString()
10+
timezone?: string;
11+
12+
@IsOptional()
13+
@IsString()
14+
depreciationMethod?: string;
15+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
export class Settings {
2+
id: string;
3+
defaultCurrency: string;
4+
timezone: string;
5+
depreciationMethod: string;
6+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import { Controller, Get, Post, Put, Delete, Body, Param } from '@nestjs/common';
2+
import { SettingsService } from './settings.service';
3+
import { CreateSettingsDto } from './dto/create-settings.dto';
4+
import { UpdateSettingsDto } from './dto/update-settings.dto';
5+
6+
@Controller('settings')
7+
export class SettingsController {
8+
constructor(private readonly settingsService: SettingsService) {}
9+
10+
@Get()
11+
findAll() {
12+
return this.settingsService.findAll();
13+
}
14+
15+
@Get(':id')
16+
findOne(@Param('id') id: string) {
17+
return this.settingsService.findOne(id);
18+
}
19+
20+
@Post()
21+
create(@Body() createSettingsDto: CreateSettingsDto) {
22+
return this.settingsService.create(createSettingsDto);
23+
}
24+
25+
@Put(':id')
26+
update(@Param('id') id: string, @Body() updateSettingsDto: UpdateSettingsDto) {
27+
return this.settingsService.update(id, updateSettingsDto);
28+
}
29+
30+
@Delete(':id')
31+
remove(@Param('id') id: string) {
32+
return this.settingsService.remove(id);
33+
}
34+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import { Module } from '@nestjs/common';
2+
import { SettingsController } from './settings.controller';
3+
import { SettingsService } from './settings.service';
4+
5+
@Module({
6+
controllers: [SettingsController],
7+
providers: [SettingsService],
8+
})
9+
export class SettingsModule {}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import { Injectable } from '@nestjs/common';
2+
import { CreateSettingsDto } from './dto/create-settings.dto';
3+
import { UpdateSettingsDto } from './dto/update-settings.dto';
4+
5+
@Injectable()
6+
export class SettingsService {
7+
private settings = [];
8+
9+
findAll() {
10+
return this.settings;
11+
}
12+
13+
findOne(id: string) {
14+
return this.settings.find(s => s.id === id);
15+
}
16+
17+
create(createSettingsDto: CreateSettingsDto) {
18+
const newSetting = { id: Date.now().toString(), ...createSettingsDto };
19+
this.settings.push(newSetting);
20+
return newSetting;
21+
}
22+
23+
update(id: string, updateSettingsDto: UpdateSettingsDto) {
24+
const setting = this.findOne(id);
25+
if (setting) {
26+
Object.assign(setting, updateSettingsDto);
27+
}
28+
return setting;
29+
}
30+
31+
remove(id: string) {
32+
const idx = this.settings.findIndex(s => s.id === id);
33+
if (idx > -1) {
34+
return this.settings.splice(idx, 1);
35+
}
36+
return null;
37+
}
38+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import { IsOptional, IsString, IsEmail, IsPhoneNumber } from 'class-validator';
2+
3+
export class UpdateProfileDto {
4+
@IsOptional()
5+
@IsString()
6+
name?: string;
7+
8+
@IsOptional()
9+
@IsEmail()
10+
email?: string;
11+
12+
@IsOptional()
13+
@IsPhoneNumber()
14+
phone?: string;
15+
16+
@IsOptional()
17+
@IsString()
18+
avatarUrl?: string;
19+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
export class UserProfile {
2+
id: string;
3+
name: string;
4+
email: string;
5+
phone: string;
6+
avatarUrl: string;
7+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import { Controller, Get, Put, Body, UseInterceptors, UploadedFile, Post, Req } from '@nestjs/common';
2+
import { FileInterceptor } from '@nestjs/platform-express';
3+
import { UpdateProfileDto } from './dto/update-profile.dto';
4+
import { UserProfileService } from './user-profile.service';
5+
6+
@Controller('profile')
7+
export class UserProfileController {
8+
constructor(private readonly userProfileService: UserProfileService) {}
9+
10+
@Get()
11+
getProfile(@Req() req) {
12+
// TODO: Get user from request
13+
return this.userProfileService.getProfile(req.user.id);
14+
}
15+
16+
@Put()
17+
updateProfile(@Req() req, @Body() updateProfileDto: UpdateProfileDto) {
18+
return this.userProfileService.updateProfile(req.user.id, updateProfileDto);
19+
}
20+
21+
@Post('avatar')
22+
@UseInterceptors(FileInterceptor('file'))
23+
uploadAvatar(@Req() req, @UploadedFile() file: any) {
24+
return this.userProfileService.uploadAvatar(req.user.id, file);
25+
}
26+
}

0 commit comments

Comments
 (0)