التحقق من عدم تكرار القيم في قاعدة البيانات (البيانات الفريدة) - الطريقة الجديدة
الواجهة الخلفية (الخدمة):
// للإضافة
async allSerialNumbersOrg(): Promise<any> {
let field = 'serial_number_org';
let query: any = await this.assetRepository
.createQueryBuilder('assets')
.select(`DISTINCT(${field})`)
.where(`${field} IS NOT NULL`)
.where(`${field} != ''`)
.getRawMany();
return query.map(element => element.serial_number_org);
}
// للتعديل
async allSerialNumbersOrgButThis(value: string): Promise<any> {
let field = 'serial_number_org';
let query: any = await this.assetRepository
.createQueryBuilder('assets')
.select(`DISTINCT(${field})`)
.where(`${field} IS NOT NULL`)
.where(`${field} != ''`)
.andWhere(`${field} != '${value}'`)
.getRawMany();
return query.map(element => element.serial_number_org);
}
الواجهة الخلفية (المراقب):
// للإضافة
@Get('all-ids')
allIds() {
return this.ingredientsService.allIds();
}
// للتعديل
@Get('all-ids-but-this/:ingredient_id')
allIdsButThis(@Param('ingredient_id') ingredient_id: string) {
return this.ingredientsService.allIdsButThis(ingredient_id);
}
طريقة استخدام أفضل (الخدمة):
// للإضافة
async allSerialNumbers(): Promise<any> {
let field = 'serial_number';
let query: any = await this.assetRepository
.createQueryBuilder('assets')
.select(`DISTINCT(${field})`)
.where(`${field} IS NOT NULL`)
.getRawMany();
return query.map(element => element.serial_number);
}
// للتعديل
async allSerialNumbersButThis(value: string): Promise<any> {
let field = 'serial_number';
let query: any = await this.assetRepository
.createQueryBuilder('assets')
.select(`DISTINCT(${field})`)
.where(`${field} IS NOT NULL`)
.andWhere(`${field} != '${value}'`)
.getRawMany();
return query.map(element => element.serial_number);
}
طريقة استخدام أفضل (المراقب):
// للإضافة
@Get('all-serial-numbers')
allSerialNumbers() {
return this.assetsService.allSerialNumbers();
}
// للتعديل
@Get('all-serial-numbers-but-this/:value')
allIdsButThis(@Param('value') value: string) {
return this.assetsService.allSerialNumbersButThis(value);
}
الواجهة الأمامية (الخدمة):
// للإضافة
public getAllIds(): Observable<any> {
return this.http.get(`${this.backEndURL}/${this.tableName}/all-ids`);
}
// للتعديل
public getAllIdsButThis(value: string): Observable<any> {
return this.http.get(`${this.backEndURL}/${this.tableName}/all-ids-but-this/${value}`);
}
الواجهة الأمامية (المكوّن):
existingValues: any[] = []; // Example of existing values
constructor(public translateService: TranslateService,
public copyToClipboardService: CopyToClipboardService,
// private storage: AngularFireStorage,
private _formBuilder: FormBuilder,
public googleTranslateService: _GoogleTranslateService,
public convertionHijriDateService: ConvertionHijriDateService,
private ingredientsService: IngredientsService,
private ingredientsClassificationsService: IngredientsClassificationsService,
private uploadService: FirebaseUploadService,
private snackBarService: SnackBarService,
@Inject(MAT_DIALOG_DATA) public data: Ingredient,
public dialog: MatDialog,
private localStorageService: LocalStorageService,
private timeCalculator: _FileTimeCalculatorService
) {
this.lang = this.localStorageService.getLanguageCode();
if (this.data) {
// حالة التعديل
this.ingredientsService.getAllIdsButThis(this.data?.ingredient_id).subscribe((res: any[]) => {
this.existingValues = res;
});
this.editMode = false;
} else {
// حالة الإنشاء
this.ingredientsService.getAllIds().subscribe((res: any[]) => {
this.existingValues = res;
});
this.data = new Ingredient();
this.editMode = true;
}
this.bringClassificaton();
}
ngOnInit() {
this.refresh();
this.form = this._formBuilder.group({
id: null,
ingredient_id: ['', [Validators.required, this.uniqueValueValidator()]],
ar_name: ['', Validators.required],
en_name: ['', Validators.required],
classification: (this.data?.id) ? [''] : ['', Validators.required],
quantity: ['', Validators.required],
price: ['', Validators.required],
grams: ['', Validators.required],
notes: [''],
image: ['', this.fileValidator(this.extensions, 2)],
});
}
uniqueValueValidator(): ValidatorFn {
return (control: AbstractControl): ValidationErrors | null => {
const value = control.value;
if (this.existingValues.includes(value)) {
return { uniqueValue: { value: this.translateService.instant('ERRORS.NO_DUPLUCAITE') } };
}
return null;
};
}
<mat-error align="start" *ngIf="form.controls['ingredient_id'].hasError('uniqueValue')">
{{form.controls['ingredient_id'].errors.uniqueValue.value}}
</mat-error>
استعادة عناصر بناءاً على أرقام المعرفات:
async fintByIngredient(id: number): Promise<any> {
let query: any = await this.costRepository
.query(`Select DISTINCT(costId) from ingredients_for_costs WHERE ingredientId = ${id} ORDER BY costId ASC`)
let ids = query.map(cost => cost.costId);
return this.costRepository.findByIds(ids);
}
تعليقات
إرسال تعليق