From 3acc832c251c91d9a5baa284d650d5277cd632f1 Mon Sep 17 00:00:00 2001 From: DarKylX Date: Tue, 20 Oct 2026 11:50:22 +0300 Subject: [PATCH] =?UTF-8?q?fix:=20=D1=81=D0=B0=D0=B9=D1=82=20=D0=BC=D0=B5?= =?UTF-8?q?=D1=80=D0=BE=D0=BF=D1=80=D0=B8=D1=8F=D1=82=D0=B8=D1=8F=20=D0=B8?= =?UTF-8?q?=20=D0=BD=D0=B5=D0=BE=D0=B1=D1=8F=D0=B7=D0=B0=D1=82=D0=B5=D0=BB?= =?UTF-8?q?=D1=8C=D0=BD=D1=8B=D0=B9=20=D0=BA=D0=BE=D0=BD=D1=82=D0=B0=D0=BA?= =?UTF-8?q?=D1=82=20=D0=B2=20=D0=B7=D0=B0=D0=BF=D1=80=D0=BE=D1=81=D0=B5=20?= =?UTF-8?q?=D0=BF=D0=BE=D0=B4=D0=BA=D0=BB=D1=8E=D1=87=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../program-registration.repository.port.ts | 7 ++++- .../program/program-registration.model.ts | 2 ++ .../program-registration-http.adapter.ts | 4 +-- .../registration/registration.component.html | 27 +++++++++++++------ .../registration.component.spec.ts | 20 ++++++++++++++ .../registration/registration.component.ts | 14 +++++++--- 6 files changed, 60 insertions(+), 14 deletions(-) diff --git a/projects/social_platform/src/app/domain/program/ports/program-registration.repository.port.ts b/projects/social_platform/src/app/domain/program/ports/program-registration.repository.port.ts index 8f3c83faf..093a8a1df 100644 --- a/projects/social_platform/src/app/domain/program/ports/program-registration.repository.port.ts +++ b/projects/social_platform/src/app/domain/program/ports/program-registration.repository.port.ts @@ -16,7 +16,12 @@ export abstract class ProgramRegistrationRepositoryPort { publish: boolean, ): Observable; abstract importOptions(id: number, file: File): Observable; - abstract connect(id: number, url: string, comment: string): Observable; + abstract connect( + id: number, + url: string, + comment: string, + contact: string, + ): Observable; abstract publicForm(id: number): Observable; abstract submit(id: number, data: object, signup: boolean): Observable; abstract tokenAction( diff --git a/projects/social_platform/src/app/domain/program/program-registration.model.ts b/projects/social_platform/src/app/domain/program/program-registration.model.ts index 216b7b4ab..d1de81737 100644 --- a/projects/social_platform/src/app/domain/program/program-registration.model.ts +++ b/projects/social_platform/src/app/domain/program/program-registration.model.ts @@ -24,6 +24,8 @@ export interface RegistrationSettings { externalStatus: "not_connected" | "requested" | "connected"; externalUrl: string; connectionComment: string; + connectionWebsiteUrl: string; + connectionContact: string; answeredFieldIds: string[]; } export interface RegistrationPublic { diff --git a/projects/social_platform/src/app/infrastructure/adapters/program/program-registration-http.adapter.ts b/projects/social_platform/src/app/infrastructure/adapters/program/program-registration-http.adapter.ts index 84722469e..238186c79 100644 --- a/projects/social_platform/src/app/infrastructure/adapters/program/program-registration-http.adapter.ts +++ b/projects/social_platform/src/app/infrastructure/adapters/program/program-registration-http.adapter.ts @@ -32,10 +32,10 @@ export class ProgramRegistrationHttpAdapter implements ProgramRegistrationReposi data, ); } - connect(id: number, url: string, comment: string) { + connect(id: number, url: string, comment: string, contact: string) { return this.api.post( `${this.root(id)}/management/registration/connection/`, - { url, comment }, + { url, comment, contact }, ); } publicForm(id: number) { diff --git a/projects/social_platform/src/app/ui/pages/program/management/registration/registration.component.html b/projects/social_platform/src/app/ui/pages/program/management/registration/registration.component.html index ef8b7b916..9c1c8aeb7 100644 --- a/projects/social_platform/src/app/ui/pages/program/management/registration/registration.component.html +++ b/projects/social_platform/src/app/ui/pages/program/management/registration/registration.component.html @@ -113,9 +113,9 @@

Внешняя форма регистрации

} @else if (data.externalStatus === "requested") {
- Ожидаем подключения + Запрос передан администратору

- Запрос доступен администратору платформы. После подключения можно будет опубликовать + Мы свяжемся с вами в ближайшее время. После подключения можно будет опубликовать внешний способ регистрации.

@@ -317,18 +317,29 @@

Варианты ответа

} @else if (dialog() === "connection") {
-

- Администратор проверит интеграцию. Одна ссылка на сайт не создаёт участников на - платформе. -

+ +

Запрос поступит администратору платформы. Мы свяжемся с вами в ближайшее время.

} @else if (dialog() === "preview") {
diff --git a/projects/social_platform/src/app/ui/pages/program/management/registration/registration.component.spec.ts b/projects/social_platform/src/app/ui/pages/program/management/registration/registration.component.spec.ts index 4dd21938f..3fdcac209 100644 --- a/projects/social_platform/src/app/ui/pages/program/management/registration/registration.component.spec.ts +++ b/projects/social_platform/src/app/ui/pages/program/management/registration/registration.component.spec.ts @@ -27,6 +27,8 @@ const snapshot: RegistrationSettings = { externalStatus: "not_connected", externalUrl: "", connectionComment: "", + connectionWebsiteUrl: "", + connectionContact: "", answeredFieldIds: [], link: null, }; @@ -78,6 +80,24 @@ describe("Редактор анкеты регистрации", () => { expect(component.previewGroup.disabled).toBe(true); expect(api.save).not.toHaveBeenCalled(); }); + it("запрос принимает сайт без необязательных деталей и передаёт контакт отдельно", () => { + const { component, api } = setup(); + component.setMode("external"); + component.open("connection"); + component.connection.controls.url.setValue("https://event.example.test"); + expect(component.connection.valid).toBe(true); + component.connection.controls.contact.setValue("@event_organizer"); + api.connect.mockReturnValue(of({ ...snapshot, externalStatus: "requested" })); + component.requestConnection(); + expect(api.connect).toHaveBeenCalledWith( + 42, + "https://event.example.test", + "", + "@event_organizer", + ); + expect(component.message()).toContain("Мы свяжемся с вами в ближайшее время"); + expect(component.dialog()).toBeNull(); + }); it("ошибка импорта сохраняет старые варианты", () => { const { component, api } = setup(); component.edit(field); diff --git a/projects/social_platform/src/app/ui/pages/program/management/registration/registration.component.ts b/projects/social_platform/src/app/ui/pages/program/management/registration/registration.component.ts index 131021216..cfb0b5ea4 100644 --- a/projects/social_platform/src/app/ui/pages/program/management/registration/registration.component.ts +++ b/projects/social_platform/src/app/ui/pages/program/management/registration/registration.component.ts @@ -98,8 +98,9 @@ export class ManagementRegistrationComponent { position: [1, Validators.min(1)], }); readonly connection = this.fb.group({ - url: ["", [Validators.required, Validators.pattern(/^https?:\/\//)]], + url: ["", [Validators.required, Validators.pattern(/^https?:\/\//), Validators.maxLength(200)]], comment: ["", Validators.maxLength(2000)], + contact: ["", Validators.maxLength(500)], }); readonly fieldTypes = [ { id: "text", label: "Короткий текст" }, @@ -159,6 +160,13 @@ export class ManagementRegistrationComponent { return this.fieldTypes.find(t => t.id === field.type)?.label ?? field.type; } open(dialog: NonNullable>, event?: Event) { + if (dialog === "connection") { + this.connection.reset({ + url: this.snapshot()?.connectionWebsiteUrl ?? "", + comment: this.snapshot()?.connectionComment ?? "", + contact: this.snapshot()?.connectionContact ?? "", + }); + } this.trigger = (event?.currentTarget as HTMLElement) ?? null; this.dialogError.set(null); this.dialog.set(dialog); @@ -329,7 +337,7 @@ export class ManagementRegistrationComponent { this.dialogError.set(null); const value = this.connection.getRawValue(); this.api - .connect(this.programId(), value.url, value.comment) + .connect(this.programId(), value.url, value.comment, value.contact) .pipe( finalize(() => this.busy.set(false)), takeUntilDestroyed(this.destroy), @@ -338,7 +346,7 @@ export class ManagementRegistrationComponent { next: data => { this.snapshot.set(data); this.dialog.set(null); - this.message.set("Запрос сохранён. Подключение формы выполнит администратор платформы."); + this.message.set("Запрос передан администратору. Мы свяжемся с вами в ближайшее время."); }, error: e => this.dialogError.set(evaluationError(e)), });