- docs/00-15: دراسة، بنية، محرك تعرفة، تسعير، نموذج استئجار، تكاملات، بيانات، realtime، خطة، devops، لاندنج، مخاطر، اصطلاحات سيرفر، تدفق نشر - backend/: NestJS 11 على Docker (health + tenants + عزل tenant_id + بادئة tripz_ + Redis DB 3) - apps/rider, apps/driver, dashboards/admin-web, dashboards/superadmin-web (هياكل) - sync-to-server.sh + .gitignore Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
42 lines
1.2 KiB
TypeScript
42 lines
1.2 KiB
TypeScript
import { Injectable } from '@nestjs/common';
|
|
import { InjectRepository } from '@nestjs/typeorm';
|
|
import { Repository } from 'typeorm';
|
|
import { Tenant } from '../../database/entities/tenant.entity';
|
|
|
|
@Injectable()
|
|
export class TenantsService {
|
|
constructor(
|
|
@InjectRepository(Tenant)
|
|
private readonly repo: Repository<Tenant>,
|
|
) {}
|
|
|
|
findAll(): Promise<Tenant[]> {
|
|
return this.repo.find();
|
|
}
|
|
|
|
findBySlug(slug: string): Promise<Tenant | null> {
|
|
return this.repo.findOne({ where: { slug } });
|
|
}
|
|
|
|
create(data: Partial<Tenant>): Promise<Tenant> {
|
|
return this.repo.save(this.repo.create(data));
|
|
}
|
|
|
|
/**
|
|
* الإعداد الديناميكي الذي يجلبه تطبيق فلاتر عند الإقلاع (GET /tenant/config).
|
|
* كل ما يمكن جعله ديناميكياً (نصوص، ميزات، ألوان، دفع) يأتي من هنا — راجع docs/06.
|
|
*/
|
|
async config(slug: string) {
|
|
const t = await this.findBySlug(slug);
|
|
if (!t) return null;
|
|
return {
|
|
slug: t.slug,
|
|
name: t.name,
|
|
countryPack: t.countryPack,
|
|
plan: t.plan,
|
|
branding: t.branding,
|
|
features: t.features,
|
|
};
|
|
}
|
|
}
|