fix: persist the prior-archive cutoff date when the owner changes it
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -2,12 +2,14 @@ import {
|
|||||||
ArrayMinSize,
|
ArrayMinSize,
|
||||||
IsArray,
|
IsArray,
|
||||||
IsIn,
|
IsIn,
|
||||||
|
IsISO8601,
|
||||||
IsNumber,
|
IsNumber,
|
||||||
IsOptional,
|
IsOptional,
|
||||||
IsString,
|
IsString,
|
||||||
MaxLength,
|
MaxLength,
|
||||||
Min,
|
Min,
|
||||||
MinLength,
|
MinLength,
|
||||||
|
ValidateIf,
|
||||||
ValidateNested,
|
ValidateNested,
|
||||||
} from 'class-validator';
|
} from 'class-validator';
|
||||||
import { Type } from 'class-transformer';
|
import { Type } from 'class-transformer';
|
||||||
@@ -72,5 +74,8 @@ export class UpdateOrganizationDto {
|
|||||||
export class UpdatePriorArchiveCutoffDto
|
export class UpdatePriorArchiveCutoffDto
|
||||||
implements UpdatePriorArchiveCutoffRequest
|
implements UpdatePriorArchiveCutoffRequest
|
||||||
{
|
{
|
||||||
|
/** بدون دکوراتور، whitelist پایپ Nest فیلد را حذف میکرد و ذخیره همیشه خطا میداد. */
|
||||||
|
@ValidateIf((_, value) => value !== null)
|
||||||
|
@IsISO8601()
|
||||||
cutoffAt!: string | null;
|
cutoffAt!: string | null;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -95,16 +95,23 @@ async function setPriorArchive(userId: string, enabled: boolean) {
|
|||||||
|
|
||||||
function cutoffPayload(value: string): UpdatePriorArchiveCutoffRequest {
|
function cutoffPayload(value: string): UpdatePriorArchiveCutoffRequest {
|
||||||
const parsed = parseLocalInput(value);
|
const parsed = parseLocalInput(value);
|
||||||
return { cutoffAt: parsed ? parsed.toISOString() : null };
|
if (!parsed) return { cutoffAt: null };
|
||||||
|
// پایان همان روز محلی تا ایمپورت همان روز هم قبل از تاریخ قطع شمرده شود
|
||||||
|
parsed.setHours(23, 59, 59, 999);
|
||||||
|
return { cutoffAt: parsed.toISOString() };
|
||||||
|
}
|
||||||
|
|
||||||
|
function applyCutoffFromOrg(org: Pick<OrganizationDto, 'priorArchiveCutoffAt'>) {
|
||||||
|
cutoffLocal.value = org.priorArchiveCutoffAt
|
||||||
|
? formatLocalDateInput(new Date(org.priorArchiveCutoffAt))
|
||||||
|
: '';
|
||||||
}
|
}
|
||||||
|
|
||||||
async function loadPriorArchiveCutoff() {
|
async function loadPriorArchiveCutoff() {
|
||||||
cutoffLoading.value = true;
|
cutoffLoading.value = true;
|
||||||
try {
|
try {
|
||||||
const { data } = await api.get<OrganizationDto>('/organizations/current');
|
const { data } = await api.get<OrganizationDto>('/organizations/current');
|
||||||
cutoffLocal.value = data.priorArchiveCutoffAt
|
applyCutoffFromOrg(data);
|
||||||
? formatLocalDateInput(new Date(data.priorArchiveCutoffAt))
|
|
||||||
: '';
|
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
error.value = axios.isAxiosError(e)
|
error.value = axios.isAxiosError(e)
|
||||||
? String((e.response?.data as { message?: string })?.message ?? 'بارگذاری تاریخ بایگانی ناموفق بود.')
|
? String((e.response?.data as { message?: string })?.message ?? 'بارگذاری تاریخ بایگانی ناموفق بود.')
|
||||||
@@ -120,7 +127,11 @@ async function onCutoffChange(value: string) {
|
|||||||
error.value = '';
|
error.value = '';
|
||||||
ok.value = '';
|
ok.value = '';
|
||||||
try {
|
try {
|
||||||
await api.patch('/organizations/current/prior-archive-cutoff', cutoffPayload(value));
|
const { data } = await api.patch<OrganizationDto>(
|
||||||
|
'/organizations/current/prior-archive-cutoff',
|
||||||
|
cutoffPayload(value),
|
||||||
|
);
|
||||||
|
applyCutoffFromOrg(data);
|
||||||
ok.value = value ? 'تاریخ بایگانی اطلاعات قبل ذخیره شد.' : 'تاریخ بایگانی اطلاعات قبل پاک شد.';
|
ok.value = value ? 'تاریخ بایگانی اطلاعات قبل ذخیره شد.' : 'تاریخ بایگانی اطلاعات قبل پاک شد.';
|
||||||
await auth.hydrate();
|
await auth.hydrate();
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
|||||||
Reference in New Issue
Block a user