diff --git a/apps/adm/src/views/SettingsView.vue b/apps/adm/src/views/SettingsView.vue
index 340ae2d..dde539d 100644
--- a/apps/adm/src/views/SettingsView.vue
+++ b/apps/adm/src/views/SettingsView.vue
@@ -24,47 +24,106 @@
-
-
+
+
-
-
-
-
+
+
شبکههای اجتماعی
+
+
+ مورد {{ i + 1 }}
+
+
+
-
{{ msg }}
-
+
+
+
{{ msg }}
+
+
+
diff --git a/apps/api/src/content/content.controller.ts b/apps/api/src/content/content.controller.ts
index 9aedd9a..ec487e8 100644
--- a/apps/api/src/content/content.controller.ts
+++ b/apps/api/src/content/content.controller.ts
@@ -1,7 +1,16 @@
import { Body, Controller, Get, Param, Put, UseGuards } from "@nestjs/common";
import { ContentService } from "./content.service";
import { JwtAuthGuard } from "../auth/jwt-auth.guard";
-import { IsObject, IsOptional, IsString } from "class-validator";
+import { IsArray, IsOptional, IsString, ValidateNested } from "class-validator";
+import { Type } from "class-transformer";
+
+class SocialDto {
+ @IsString()
+ label!: string;
+
+ @IsString()
+ url!: string;
+}
class UpdateSettingsDto {
@IsOptional() @IsString() brandName?: string;
@@ -10,8 +19,12 @@ class UpdateSettingsDto {
@IsOptional() @IsString() phone?: string;
@IsOptional() @IsString() address?: string;
@IsOptional() @IsString() timezone?: string;
- @IsOptional() socials?: object;
- @IsOptional() @IsString() logoUrl?: string;
+ @IsOptional() @IsString() logoUrl?: string | null;
+ @IsOptional()
+ @IsArray()
+ @ValidateNested({ each: true })
+ @Type(() => SocialDto)
+ socials?: SocialDto[];
}
class UpsertSectionDto {
diff --git a/apps/api/src/content/content.service.ts b/apps/api/src/content/content.service.ts
index 509284d..431c796 100644
--- a/apps/api/src/content/content.service.ts
+++ b/apps/api/src/content/content.service.ts
@@ -19,7 +19,14 @@ export class ContentService {
socials?: object;
logoUrl?: string | null;
}) {
- return this.prisma.siteSettings.update({ where: { id: "default" }, data });
+ const { logoUrl, ...rest } = data;
+ return this.prisma.siteSettings.update({
+ where: { id: "default" },
+ data: {
+ ...rest,
+ ...(logoUrl !== undefined ? { logoUrl: logoUrl || null } : {}),
+ },
+ });
}
async listSections() {