Added page layouts
This commit is contained in:
118
backend/src/page-layout/page-layout.service.ts
Normal file
118
backend/src/page-layout/page-layout.service.ts
Normal file
@@ -0,0 +1,118 @@
|
||||
import { Injectable, NotFoundException } from '@nestjs/common';
|
||||
import { TenantDatabaseService } from '../tenant/tenant-database.service';
|
||||
import { CreatePageLayoutDto, UpdatePageLayoutDto } from './dto/page-layout.dto';
|
||||
|
||||
@Injectable()
|
||||
export class PageLayoutService {
|
||||
constructor(private tenantDbService: TenantDatabaseService) {}
|
||||
|
||||
async create(tenantId: string, createDto: CreatePageLayoutDto) {
|
||||
const knex = await this.tenantDbService.getTenantKnex(tenantId);
|
||||
|
||||
// If this layout is set as default, unset other defaults for the same object
|
||||
if (createDto.isDefault) {
|
||||
await knex('page_layouts')
|
||||
.where({ object_id: createDto.objectId })
|
||||
.update({ is_default: false });
|
||||
}
|
||||
|
||||
const [id] = await knex('page_layouts').insert({
|
||||
name: createDto.name,
|
||||
object_id: createDto.objectId,
|
||||
is_default: createDto.isDefault || false,
|
||||
layout_config: JSON.stringify(createDto.layoutConfig),
|
||||
description: createDto.description || null,
|
||||
});
|
||||
|
||||
// Get the inserted record
|
||||
const result = await knex('page_layouts').where({ id }).first();
|
||||
return result;
|
||||
}
|
||||
|
||||
async findAll(tenantId: string, objectId?: string) {
|
||||
const knex = await this.tenantDbService.getTenantKnex(tenantId);
|
||||
|
||||
let query = knex('page_layouts');
|
||||
|
||||
if (objectId) {
|
||||
query = query.where({ object_id: objectId });
|
||||
}
|
||||
|
||||
const layouts = await query.orderByRaw('is_default DESC, name ASC');
|
||||
return layouts;
|
||||
}
|
||||
|
||||
async findOne(tenantId: string, id: string) {
|
||||
const knex = await this.tenantDbService.getTenantKnex(tenantId);
|
||||
|
||||
const layout = await knex('page_layouts').where({ id }).first();
|
||||
|
||||
if (!layout) {
|
||||
throw new NotFoundException(`Page layout with ID ${id} not found`);
|
||||
}
|
||||
|
||||
return layout;
|
||||
}
|
||||
|
||||
async findDefaultByObject(tenantId: string, objectId: string) {
|
||||
const knex = await this.tenantDbService.getTenantKnex(tenantId);
|
||||
|
||||
const layout = await knex('page_layouts')
|
||||
.where({ object_id: objectId, is_default: true })
|
||||
.first();
|
||||
|
||||
return layout || null;
|
||||
}
|
||||
|
||||
async update(tenantId: string, id: string, updateDto: UpdatePageLayoutDto) {
|
||||
const knex = await this.tenantDbService.getTenantKnex(tenantId);
|
||||
|
||||
// Check if layout exists
|
||||
await this.findOne(tenantId, id);
|
||||
|
||||
// If setting as default, unset other defaults for the same object
|
||||
if (updateDto.isDefault) {
|
||||
const layout = await this.findOne(tenantId, id);
|
||||
await knex('page_layouts')
|
||||
.where({ object_id: layout.object_id })
|
||||
.whereNot({ id })
|
||||
.update({ is_default: false });
|
||||
}
|
||||
|
||||
const updates: any = {};
|
||||
|
||||
if (updateDto.name !== undefined) {
|
||||
updates.name = updateDto.name;
|
||||
}
|
||||
|
||||
if (updateDto.isDefault !== undefined) {
|
||||
updates.is_default = updateDto.isDefault;
|
||||
}
|
||||
|
||||
if (updateDto.layoutConfig !== undefined) {
|
||||
updates.layout_config = JSON.stringify(updateDto.layoutConfig);
|
||||
}
|
||||
|
||||
if (updateDto.description !== undefined) {
|
||||
updates.description = updateDto.description;
|
||||
}
|
||||
|
||||
updates.updated_at = knex.fn.now();
|
||||
|
||||
await knex('page_layouts').where({ id }).update(updates);
|
||||
|
||||
// Get the updated record
|
||||
const result = await knex('page_layouts').where({ id }).first();
|
||||
return result;
|
||||
}
|
||||
|
||||
async remove(tenantId: string, id: string) {
|
||||
const knex = await this.tenantDbService.getTenantKnex(tenantId);
|
||||
|
||||
await this.findOne(tenantId, id);
|
||||
|
||||
await knex('page_layouts').where({ id }).delete();
|
||||
|
||||
return { message: 'Page layout deleted successfully' };
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user