From dbbed7cbba8d5967d5b2bdc8a666fce22ac0e22c Mon Sep 17 00:00:00 2001 From: Flam3rboy <34555296+Flam3rboy@users.noreply.github.com> Date: Mon, 13 Sep 2021 12:22:41 +0200 Subject: :bug: fix relationship --- util/src/entities/Relationship.ts | 30 ++++++++++++++++++++++++------ util/src/interfaces/Event.ts | 14 ++++++++++---- 2 files changed, 34 insertions(+), 10 deletions(-) (limited to 'util') diff --git a/util/src/entities/Relationship.ts b/util/src/entities/Relationship.ts index 5935f5b6..61b3ac82 100644 --- a/util/src/entities/Relationship.ts +++ b/util/src/entities/Relationship.ts @@ -1,4 +1,4 @@ -import { Column, Entity, JoinColumn, ManyToOne, RelationId } from "typeorm"; +import { Column, Entity, Index, JoinColumn, ManyToOne, RelationId } from "typeorm"; import { BaseClass } from "./BaseClass"; import { User } from "./User"; @@ -10,18 +10,36 @@ export enum RelationshipType { } @Entity("relationships") +@Index(["from_id", "to_id"], { unique: true }) export class Relationship extends BaseClass { - @Column({ nullable: true }) - @RelationId((relationship: Relationship) => relationship.user) - user_id: string; + @Column({}) + @RelationId((relationship: Relationship) => relationship.from) + from_id: string; - @JoinColumn({ name: "user_id" }) + @JoinColumn({ name: "from_id" }) @ManyToOne(() => User) - user: User; + from: User; + + @Column({}) + @RelationId((relationship: Relationship) => relationship.to) + to_id: string; + + @JoinColumn({ name: "to_id" }) + @ManyToOne(() => User) + to: User; @Column({ nullable: true }) nickname?: string; @Column({ type: "simple-enum", enum: RelationshipType }) type: RelationshipType; + + toPublicRelationship() { + return { + id: this.to?.id || this.to_id, + type: this.type, + nickname: this.nickname, + user: this.to?.toPublicUser(), + }; + } } diff --git a/util/src/interfaces/Event.ts b/util/src/interfaces/Event.ts index 5c2a01b0..aff50300 100644 --- a/util/src/interfaces/Event.ts +++ b/util/src/interfaces/Event.ts @@ -10,7 +10,7 @@ import { VoiceState } from "../entities/VoiceState"; import { ApplicationCommand } from "../entities/Application"; import { Interaction } from "./Interaction"; import { ConnectedAccount } from "../entities/ConnectedAccount"; -import { Relationship } from "../entities/Relationship"; +import { Relationship, RelationshipType } from "../entities/Relationship"; import { Presence } from "./Presence"; export interface Event { @@ -28,6 +28,12 @@ export interface InvalidatedEvent extends Event { event: "INVALIDATED"; } +export interface PublicRelationship { + id: string; + user: PublicUser; + type: RelationshipType; +} + // ! END Custom Events that shouldn't get sent to the client but processed by the server export interface ReadyEventData { @@ -72,7 +78,7 @@ export interface ReadyEventData { guild_join_requests?: any[]; // ? what is this? this is new shard?: [number, number]; user_settings?: UserSettings; - relationships?: Relationship[]; // TODO + relationships?: PublicRelationship[]; // TODO read_state: { entries: any[]; // TODO partial: boolean; @@ -412,7 +418,7 @@ export interface MessageAckEvent extends Event { export interface RelationshipAddEvent extends Event { event: "RELATIONSHIP_ADD"; - data: Relationship & { + data: PublicRelationship & { should_notify?: boolean; user: PublicUser; }; @@ -420,7 +426,7 @@ export interface RelationshipAddEvent extends Event { export interface RelationshipRemoveEvent extends Event { event: "RELATIONSHIP_REMOVE"; - data: Omit; + data: Omit; } export type EventData = -- cgit 1.4.1