You've already forked npm-core-sdk
Latest generation
This commit is contained in:
337
slotbooking.ts
337
slotbooking.ts
@@ -566,6 +566,36 @@ export interface AppointmentCommission {
|
||||
*/
|
||||
ActorID: string; // ID of the actorID which linked the site on the project commission
|
||||
}
|
||||
/**
|
||||
* @generated from protobuf message api.AppointmentContent
|
||||
*/
|
||||
export interface AppointmentContent {
|
||||
/**
|
||||
* @generated from protobuf field: repeated api.AppointmentProjectContent Projects = 1
|
||||
*/
|
||||
Projects: AppointmentProjectContent[];
|
||||
/**
|
||||
* @generated from protobuf field: repeated api.QuantityByUnit TotalQuantities = 2
|
||||
*/
|
||||
TotalQuantities: QuantityByUnit[];
|
||||
}
|
||||
/**
|
||||
* @generated from protobuf message api.AppointmentProjectContent
|
||||
*/
|
||||
export interface AppointmentProjectContent {
|
||||
/**
|
||||
* @generated from protobuf field: string ProjectID = 1
|
||||
*/
|
||||
ProjectID: string;
|
||||
/**
|
||||
* @generated from protobuf field: repeated api.AppointmentCommission Commissions = 2
|
||||
*/
|
||||
Commissions: AppointmentCommission[];
|
||||
/**
|
||||
* @generated from protobuf field: repeated api.QuantityByUnit ProjectQuantities = 3
|
||||
*/
|
||||
ProjectQuantities: QuantityByUnit[];
|
||||
}
|
||||
/**
|
||||
* @generated from protobuf message api.Commission
|
||||
*/
|
||||
@@ -621,7 +651,8 @@ export interface Booking {
|
||||
*/
|
||||
AppointmentType: AppointmentType;
|
||||
/**
|
||||
* @generated from protobuf field: repeated api.Commission Commissions = 2
|
||||
* @deprecated
|
||||
* @generated from protobuf field: repeated api.Commission Commissions = 2 [deprecated = true]
|
||||
*/
|
||||
Commissions: Commission[];
|
||||
/**
|
||||
@@ -644,10 +675,22 @@ export interface Booking {
|
||||
* @generated from protobuf field: repeated string Emails = 7
|
||||
*/
|
||||
Emails: string[];
|
||||
/**
|
||||
* @generated from protobuf field: api.AppointmentContent Loading = 9
|
||||
*/
|
||||
Loading?: AppointmentContent;
|
||||
/**
|
||||
* @generated from protobuf field: api.AppointmentContent Unloading = 10
|
||||
*/
|
||||
Unloading?: AppointmentContent;
|
||||
/**
|
||||
* @generated from protobuf field: string Reason = 8
|
||||
*/
|
||||
Reason: string;
|
||||
/**
|
||||
* @generated from protobuf field: string LastUpdate = 12
|
||||
*/
|
||||
LastUpdate: string;
|
||||
}
|
||||
/**
|
||||
* @generated from protobuf message api.SlotGroup
|
||||
@@ -662,6 +705,36 @@ export interface SlotGroup {
|
||||
*/
|
||||
Availability: number; // Availability of the slot group according to site configuration and current bookings -1 to 100 (-1: closed, 0: no longer available, 100: fully available).
|
||||
}
|
||||
/**
|
||||
* @generated from protobuf message api.SlotGroupAndReason
|
||||
*/
|
||||
export interface SlotGroupAndReason {
|
||||
/**
|
||||
* @generated from protobuf field: api.SlotGroup SlotGroup = 1
|
||||
*/
|
||||
SlotGroup?: SlotGroup;
|
||||
/**
|
||||
* @generated from protobuf field: string Reason = 2
|
||||
*/
|
||||
Reason: string;
|
||||
}
|
||||
/**
|
||||
* @generated from protobuf message api.BookableSlot
|
||||
*/
|
||||
export interface BookableSlot {
|
||||
/**
|
||||
* @generated from protobuf field: api.Slot Slot = 1
|
||||
*/
|
||||
Slot?: Slot; // List of slots belonging to the group.
|
||||
/**
|
||||
* @generated from protobuf field: int32 Availability = 2
|
||||
*/
|
||||
Availability: number; // Availability of the slot group according to site configuration and current bookings -1 to 100 (-1: closed, 0: no longer available, 100: fully available).
|
||||
/**
|
||||
* @generated from protobuf field: string Reason = 3
|
||||
*/
|
||||
Reason: string;
|
||||
}
|
||||
/**
|
||||
* @generated from protobuf enum api.AppointmentType
|
||||
*/
|
||||
@@ -2295,6 +2368,124 @@ class AppointmentCommission$Type extends MessageType<AppointmentCommission> {
|
||||
*/
|
||||
export const AppointmentCommission = new AppointmentCommission$Type();
|
||||
// @generated message type with reflection information, may provide speed optimized methods
|
||||
class AppointmentContent$Type extends MessageType<AppointmentContent> {
|
||||
constructor() {
|
||||
super("api.AppointmentContent", [
|
||||
{ no: 1, name: "Projects", kind: "message", localName: "Projects", jsonName: "Projects", repeat: 2 /*RepeatType.UNPACKED*/, T: () => AppointmentProjectContent, options: { "api.aggKey": "ProjectID" } },
|
||||
{ no: 2, name: "TotalQuantities", kind: "message", localName: "TotalQuantities", jsonName: "TotalQuantities", repeat: 2 /*RepeatType.UNPACKED*/, T: () => QuantityByUnit }
|
||||
]);
|
||||
}
|
||||
create(value?: PartialMessage<AppointmentContent>): AppointmentContent {
|
||||
const message = globalThis.Object.create((this.messagePrototype!));
|
||||
message.Projects = [];
|
||||
message.TotalQuantities = [];
|
||||
if (value !== undefined)
|
||||
reflectionMergePartial<AppointmentContent>(this, message, value);
|
||||
return message;
|
||||
}
|
||||
internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: AppointmentContent): AppointmentContent {
|
||||
let message = target ?? this.create(), end = reader.pos + length;
|
||||
while (reader.pos < end) {
|
||||
let [fieldNo, wireType] = reader.tag();
|
||||
switch (fieldNo) {
|
||||
case /* repeated api.AppointmentProjectContent Projects */ 1:
|
||||
message.Projects.push(AppointmentProjectContent.internalBinaryRead(reader, reader.uint32(), options));
|
||||
break;
|
||||
case /* repeated api.QuantityByUnit TotalQuantities */ 2:
|
||||
message.TotalQuantities.push(QuantityByUnit.internalBinaryRead(reader, reader.uint32(), options));
|
||||
break;
|
||||
default:
|
||||
let u = options.readUnknownField;
|
||||
if (u === "throw")
|
||||
throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
|
||||
let d = reader.skip(wireType);
|
||||
if (u !== false)
|
||||
(u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
|
||||
}
|
||||
}
|
||||
return message;
|
||||
}
|
||||
internalBinaryWrite(message: AppointmentContent, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
|
||||
/* repeated api.AppointmentProjectContent Projects = 1; */
|
||||
for (let i = 0; i < message.Projects.length; i++)
|
||||
AppointmentProjectContent.internalBinaryWrite(message.Projects[i], writer.tag(1, WireType.LengthDelimited).fork(), options).join();
|
||||
/* repeated api.QuantityByUnit TotalQuantities = 2; */
|
||||
for (let i = 0; i < message.TotalQuantities.length; i++)
|
||||
QuantityByUnit.internalBinaryWrite(message.TotalQuantities[i], writer.tag(2, WireType.LengthDelimited).fork(), options).join();
|
||||
let u = options.writeUnknownFields;
|
||||
if (u !== false)
|
||||
(u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
|
||||
return writer;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* @generated MessageType for protobuf message api.AppointmentContent
|
||||
*/
|
||||
export const AppointmentContent = new AppointmentContent$Type();
|
||||
// @generated message type with reflection information, may provide speed optimized methods
|
||||
class AppointmentProjectContent$Type extends MessageType<AppointmentProjectContent> {
|
||||
constructor() {
|
||||
super("api.AppointmentProjectContent", [
|
||||
{ no: 1, name: "ProjectID", kind: "scalar", localName: "ProjectID", jsonName: "ProjectID", T: 9 /*ScalarType.STRING*/ },
|
||||
{ no: 2, name: "Commissions", kind: "message", localName: "Commissions", jsonName: "Commissions", repeat: 2 /*RepeatType.UNPACKED*/, T: () => AppointmentCommission },
|
||||
{ no: 3, name: "ProjectQuantities", kind: "message", localName: "ProjectQuantities", jsonName: "ProjectQuantities", repeat: 2 /*RepeatType.UNPACKED*/, T: () => QuantityByUnit }
|
||||
]);
|
||||
}
|
||||
create(value?: PartialMessage<AppointmentProjectContent>): AppointmentProjectContent {
|
||||
const message = globalThis.Object.create((this.messagePrototype!));
|
||||
message.ProjectID = "";
|
||||
message.Commissions = [];
|
||||
message.ProjectQuantities = [];
|
||||
if (value !== undefined)
|
||||
reflectionMergePartial<AppointmentProjectContent>(this, message, value);
|
||||
return message;
|
||||
}
|
||||
internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: AppointmentProjectContent): AppointmentProjectContent {
|
||||
let message = target ?? this.create(), end = reader.pos + length;
|
||||
while (reader.pos < end) {
|
||||
let [fieldNo, wireType] = reader.tag();
|
||||
switch (fieldNo) {
|
||||
case /* string ProjectID */ 1:
|
||||
message.ProjectID = reader.string();
|
||||
break;
|
||||
case /* repeated api.AppointmentCommission Commissions */ 2:
|
||||
message.Commissions.push(AppointmentCommission.internalBinaryRead(reader, reader.uint32(), options));
|
||||
break;
|
||||
case /* repeated api.QuantityByUnit ProjectQuantities */ 3:
|
||||
message.ProjectQuantities.push(QuantityByUnit.internalBinaryRead(reader, reader.uint32(), options));
|
||||
break;
|
||||
default:
|
||||
let u = options.readUnknownField;
|
||||
if (u === "throw")
|
||||
throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
|
||||
let d = reader.skip(wireType);
|
||||
if (u !== false)
|
||||
(u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
|
||||
}
|
||||
}
|
||||
return message;
|
||||
}
|
||||
internalBinaryWrite(message: AppointmentProjectContent, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
|
||||
/* string ProjectID = 1; */
|
||||
if (message.ProjectID !== "")
|
||||
writer.tag(1, WireType.LengthDelimited).string(message.ProjectID);
|
||||
/* repeated api.AppointmentCommission Commissions = 2; */
|
||||
for (let i = 0; i < message.Commissions.length; i++)
|
||||
AppointmentCommission.internalBinaryWrite(message.Commissions[i], writer.tag(2, WireType.LengthDelimited).fork(), options).join();
|
||||
/* repeated api.QuantityByUnit ProjectQuantities = 3; */
|
||||
for (let i = 0; i < message.ProjectQuantities.length; i++)
|
||||
QuantityByUnit.internalBinaryWrite(message.ProjectQuantities[i], writer.tag(3, WireType.LengthDelimited).fork(), options).join();
|
||||
let u = options.writeUnknownFields;
|
||||
if (u !== false)
|
||||
(u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
|
||||
return writer;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* @generated MessageType for protobuf message api.AppointmentProjectContent
|
||||
*/
|
||||
export const AppointmentProjectContent = new AppointmentProjectContent$Type();
|
||||
// @generated message type with reflection information, may provide speed optimized methods
|
||||
class Commission$Type extends MessageType<Commission> {
|
||||
constructor() {
|
||||
super("api.Commission", [
|
||||
@@ -2455,7 +2646,10 @@ class Booking$Type extends MessageType<Booking> {
|
||||
{ no: 5, name: "AppointmentKind", kind: "scalar", localName: "AppointmentKind", jsonName: "AppointmentKind", T: 9 /*ScalarType.STRING*/ },
|
||||
{ no: 6, name: "HasReference", kind: "scalar", localName: "HasReference", jsonName: "HasReference", T: 8 /*ScalarType.BOOL*/ },
|
||||
{ no: 7, name: "Emails", kind: "scalar", localName: "Emails", jsonName: "Emails", repeat: 2 /*RepeatType.UNPACKED*/, T: 9 /*ScalarType.STRING*/ },
|
||||
{ no: 8, name: "Reason", kind: "scalar", localName: "Reason", jsonName: "Reason", T: 9 /*ScalarType.STRING*/ }
|
||||
{ no: 9, name: "Loading", kind: "message", localName: "Loading", jsonName: "Loading", T: () => AppointmentContent },
|
||||
{ no: 10, name: "Unloading", kind: "message", localName: "Unloading", jsonName: "Unloading", T: () => AppointmentContent },
|
||||
{ no: 8, name: "Reason", kind: "scalar", localName: "Reason", jsonName: "Reason", T: 9 /*ScalarType.STRING*/ },
|
||||
{ no: 12, name: "LastUpdate", kind: "scalar", localName: "LastUpdate", jsonName: "LastUpdate", T: 9 /*ScalarType.STRING*/ }
|
||||
]);
|
||||
}
|
||||
create(value?: PartialMessage<Booking>): Booking {
|
||||
@@ -2468,6 +2662,7 @@ class Booking$Type extends MessageType<Booking> {
|
||||
message.HasReference = false;
|
||||
message.Emails = [];
|
||||
message.Reason = "";
|
||||
message.LastUpdate = "";
|
||||
if (value !== undefined)
|
||||
reflectionMergePartial<Booking>(this, message, value);
|
||||
return message;
|
||||
@@ -2480,7 +2675,7 @@ class Booking$Type extends MessageType<Booking> {
|
||||
case /* api.AppointmentType AppointmentType */ 1:
|
||||
message.AppointmentType = reader.int32();
|
||||
break;
|
||||
case /* repeated api.Commission Commissions */ 2:
|
||||
case /* repeated api.Commission Commissions = 2 [deprecated = true] */ 2:
|
||||
message.Commissions.push(Commission.internalBinaryRead(reader, reader.uint32(), options));
|
||||
break;
|
||||
case /* repeated api.SegmentationSelection SegmentationSelections */ 3:
|
||||
@@ -2498,9 +2693,18 @@ class Booking$Type extends MessageType<Booking> {
|
||||
case /* repeated string Emails */ 7:
|
||||
message.Emails.push(reader.string());
|
||||
break;
|
||||
case /* api.AppointmentContent Loading */ 9:
|
||||
message.Loading = AppointmentContent.internalBinaryRead(reader, reader.uint32(), options, message.Loading);
|
||||
break;
|
||||
case /* api.AppointmentContent Unloading */ 10:
|
||||
message.Unloading = AppointmentContent.internalBinaryRead(reader, reader.uint32(), options, message.Unloading);
|
||||
break;
|
||||
case /* string Reason */ 8:
|
||||
message.Reason = reader.string();
|
||||
break;
|
||||
case /* string LastUpdate */ 12:
|
||||
message.LastUpdate = reader.string();
|
||||
break;
|
||||
default:
|
||||
let u = options.readUnknownField;
|
||||
if (u === "throw")
|
||||
@@ -2516,7 +2720,7 @@ class Booking$Type extends MessageType<Booking> {
|
||||
/* api.AppointmentType AppointmentType = 1; */
|
||||
if (message.AppointmentType !== 0)
|
||||
writer.tag(1, WireType.Varint).int32(message.AppointmentType);
|
||||
/* repeated api.Commission Commissions = 2; */
|
||||
/* repeated api.Commission Commissions = 2 [deprecated = true]; */
|
||||
for (let i = 0; i < message.Commissions.length; i++)
|
||||
Commission.internalBinaryWrite(message.Commissions[i], writer.tag(2, WireType.LengthDelimited).fork(), options).join();
|
||||
/* repeated api.SegmentationSelection SegmentationSelections = 3; */
|
||||
@@ -2537,6 +2741,15 @@ class Booking$Type extends MessageType<Booking> {
|
||||
/* string Reason = 8; */
|
||||
if (message.Reason !== "")
|
||||
writer.tag(8, WireType.LengthDelimited).string(message.Reason);
|
||||
/* api.AppointmentContent Loading = 9; */
|
||||
if (message.Loading)
|
||||
AppointmentContent.internalBinaryWrite(message.Loading, writer.tag(9, WireType.LengthDelimited).fork(), options).join();
|
||||
/* api.AppointmentContent Unloading = 10; */
|
||||
if (message.Unloading)
|
||||
AppointmentContent.internalBinaryWrite(message.Unloading, writer.tag(10, WireType.LengthDelimited).fork(), options).join();
|
||||
/* string LastUpdate = 12; */
|
||||
if (message.LastUpdate !== "")
|
||||
writer.tag(12, WireType.LengthDelimited).string(message.LastUpdate);
|
||||
let u = options.writeUnknownFields;
|
||||
if (u !== false)
|
||||
(u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
|
||||
@@ -2602,3 +2815,119 @@ class SlotGroup$Type extends MessageType<SlotGroup> {
|
||||
* @generated MessageType for protobuf message api.SlotGroup
|
||||
*/
|
||||
export const SlotGroup = new SlotGroup$Type();
|
||||
// @generated message type with reflection information, may provide speed optimized methods
|
||||
class SlotGroupAndReason$Type extends MessageType<SlotGroupAndReason> {
|
||||
constructor() {
|
||||
super("api.SlotGroupAndReason", [
|
||||
{ no: 1, name: "SlotGroup", kind: "message", localName: "SlotGroup", jsonName: "SlotGroup", T: () => SlotGroup },
|
||||
{ no: 2, name: "Reason", kind: "scalar", localName: "Reason", jsonName: "Reason", T: 9 /*ScalarType.STRING*/ }
|
||||
]);
|
||||
}
|
||||
create(value?: PartialMessage<SlotGroupAndReason>): SlotGroupAndReason {
|
||||
const message = globalThis.Object.create((this.messagePrototype!));
|
||||
message.Reason = "";
|
||||
if (value !== undefined)
|
||||
reflectionMergePartial<SlotGroupAndReason>(this, message, value);
|
||||
return message;
|
||||
}
|
||||
internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: SlotGroupAndReason): SlotGroupAndReason {
|
||||
let message = target ?? this.create(), end = reader.pos + length;
|
||||
while (reader.pos < end) {
|
||||
let [fieldNo, wireType] = reader.tag();
|
||||
switch (fieldNo) {
|
||||
case /* api.SlotGroup SlotGroup */ 1:
|
||||
message.SlotGroup = SlotGroup.internalBinaryRead(reader, reader.uint32(), options, message.SlotGroup);
|
||||
break;
|
||||
case /* string Reason */ 2:
|
||||
message.Reason = reader.string();
|
||||
break;
|
||||
default:
|
||||
let u = options.readUnknownField;
|
||||
if (u === "throw")
|
||||
throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
|
||||
let d = reader.skip(wireType);
|
||||
if (u !== false)
|
||||
(u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
|
||||
}
|
||||
}
|
||||
return message;
|
||||
}
|
||||
internalBinaryWrite(message: SlotGroupAndReason, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
|
||||
/* api.SlotGroup SlotGroup = 1; */
|
||||
if (message.SlotGroup)
|
||||
SlotGroup.internalBinaryWrite(message.SlotGroup, writer.tag(1, WireType.LengthDelimited).fork(), options).join();
|
||||
/* string Reason = 2; */
|
||||
if (message.Reason !== "")
|
||||
writer.tag(2, WireType.LengthDelimited).string(message.Reason);
|
||||
let u = options.writeUnknownFields;
|
||||
if (u !== false)
|
||||
(u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
|
||||
return writer;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* @generated MessageType for protobuf message api.SlotGroupAndReason
|
||||
*/
|
||||
export const SlotGroupAndReason = new SlotGroupAndReason$Type();
|
||||
// @generated message type with reflection information, may provide speed optimized methods
|
||||
class BookableSlot$Type extends MessageType<BookableSlot> {
|
||||
constructor() {
|
||||
super("api.BookableSlot", [
|
||||
{ no: 1, name: "Slot", kind: "message", localName: "Slot", jsonName: "Slot", T: () => Slot },
|
||||
{ no: 2, name: "Availability", kind: "scalar", localName: "Availability", jsonName: "Availability", T: 5 /*ScalarType.INT32*/, options: { "validate.rules": { int32: { lte: 100, gte: -1 } } } },
|
||||
{ no: 3, name: "Reason", kind: "scalar", localName: "Reason", jsonName: "Reason", T: 9 /*ScalarType.STRING*/ }
|
||||
]);
|
||||
}
|
||||
create(value?: PartialMessage<BookableSlot>): BookableSlot {
|
||||
const message = globalThis.Object.create((this.messagePrototype!));
|
||||
message.Availability = 0;
|
||||
message.Reason = "";
|
||||
if (value !== undefined)
|
||||
reflectionMergePartial<BookableSlot>(this, message, value);
|
||||
return message;
|
||||
}
|
||||
internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: BookableSlot): BookableSlot {
|
||||
let message = target ?? this.create(), end = reader.pos + length;
|
||||
while (reader.pos < end) {
|
||||
let [fieldNo, wireType] = reader.tag();
|
||||
switch (fieldNo) {
|
||||
case /* api.Slot Slot */ 1:
|
||||
message.Slot = Slot.internalBinaryRead(reader, reader.uint32(), options, message.Slot);
|
||||
break;
|
||||
case /* int32 Availability */ 2:
|
||||
message.Availability = reader.int32();
|
||||
break;
|
||||
case /* string Reason */ 3:
|
||||
message.Reason = reader.string();
|
||||
break;
|
||||
default:
|
||||
let u = options.readUnknownField;
|
||||
if (u === "throw")
|
||||
throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
|
||||
let d = reader.skip(wireType);
|
||||
if (u !== false)
|
||||
(u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
|
||||
}
|
||||
}
|
||||
return message;
|
||||
}
|
||||
internalBinaryWrite(message: BookableSlot, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
|
||||
/* api.Slot Slot = 1; */
|
||||
if (message.Slot)
|
||||
Slot.internalBinaryWrite(message.Slot, writer.tag(1, WireType.LengthDelimited).fork(), options).join();
|
||||
/* int32 Availability = 2; */
|
||||
if (message.Availability !== 0)
|
||||
writer.tag(2, WireType.Varint).int32(message.Availability);
|
||||
/* string Reason = 3; */
|
||||
if (message.Reason !== "")
|
||||
writer.tag(3, WireType.LengthDelimited).string(message.Reason);
|
||||
let u = options.writeUnknownFields;
|
||||
if (u !== false)
|
||||
(u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
|
||||
return writer;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* @generated MessageType for protobuf message api.BookableSlot
|
||||
*/
|
||||
export const BookableSlot = new BookableSlot$Type();
|
||||
|
||||
Reference in New Issue
Block a user