Merge pull request 'feature/#65-protocol-content-sort' (#77) from feature/#69-protcol-content-sort into develop
Reviewed-on: #77
This commit is contained in:
commit
6e618e7531
22 changed files with 138 additions and 16 deletions
|
@ -2,5 +2,6 @@ export interface SynchronizeProtocolAgendaCommand {
|
||||||
id?: number;
|
id?: number;
|
||||||
topic: string;
|
topic: string;
|
||||||
context: string;
|
context: string;
|
||||||
|
sort?: number;
|
||||||
protocolId: number;
|
protocolId: number;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@ import { dataSource } from "../../../data-source";
|
||||||
import { protocolAgenda } from "../../../entity/club/protocol/protocolAgenda";
|
import { protocolAgenda } from "../../../entity/club/protocol/protocolAgenda";
|
||||||
import DatabaseActionException from "../../../exceptions/databaseActionException";
|
import DatabaseActionException from "../../../exceptions/databaseActionException";
|
||||||
import InternalException from "../../../exceptions/internalException";
|
import InternalException from "../../../exceptions/internalException";
|
||||||
|
import ProtocolAgendaService from "../../../service/club/protocol/protocolAgendaService";
|
||||||
import { SynchronizeProtocolAgendaCommand } from "./protocolAgendaCommand";
|
import { SynchronizeProtocolAgendaCommand } from "./protocolAgendaCommand";
|
||||||
|
|
||||||
export default abstract class ProtocolAgendaCommandHandler {
|
export default abstract class ProtocolAgendaCommandHandler {
|
||||||
|
@ -11,6 +12,7 @@ export default abstract class ProtocolAgendaCommandHandler {
|
||||||
* @returns {Promise<number>}
|
* @returns {Promise<number>}
|
||||||
*/
|
*/
|
||||||
static async create(protocolId: number): Promise<number> {
|
static async create(protocolId: number): Promise<number> {
|
||||||
|
let count = await ProtocolAgendaService.getInstanceCount(protocolId);
|
||||||
return await dataSource
|
return await dataSource
|
||||||
.createQueryBuilder()
|
.createQueryBuilder()
|
||||||
.insert()
|
.insert()
|
||||||
|
@ -18,6 +20,7 @@ export default abstract class ProtocolAgendaCommandHandler {
|
||||||
.values({
|
.values({
|
||||||
topic: "",
|
topic: "",
|
||||||
context: "",
|
context: "",
|
||||||
|
sort: count,
|
||||||
protocolId,
|
protocolId,
|
||||||
})
|
})
|
||||||
.execute()
|
.execute()
|
||||||
|
@ -40,7 +43,7 @@ export default abstract class ProtocolAgendaCommandHandler {
|
||||||
.insert()
|
.insert()
|
||||||
.into(protocolAgenda)
|
.into(protocolAgenda)
|
||||||
.values(syncProtocolAgenda)
|
.values(syncProtocolAgenda)
|
||||||
.orUpdate(["topic", "context"], ["id"])
|
.orUpdate(["topic", "context", "sort"], ["id"])
|
||||||
.execute()
|
.execute()
|
||||||
.then(() => {})
|
.then(() => {})
|
||||||
.catch((err) => {
|
.catch((err) => {
|
||||||
|
|
|
@ -2,5 +2,6 @@ export interface SynchronizeProtocolDecisionCommand {
|
||||||
id?: number;
|
id?: number;
|
||||||
topic: string;
|
topic: string;
|
||||||
context: string;
|
context: string;
|
||||||
|
sort?: number;
|
||||||
protocolId: number;
|
protocolId: number;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@ import { dataSource } from "../../../data-source";
|
||||||
import { protocolDecision } from "../../../entity/club/protocol/protocolDecision";
|
import { protocolDecision } from "../../../entity/club/protocol/protocolDecision";
|
||||||
import DatabaseActionException from "../../../exceptions/databaseActionException";
|
import DatabaseActionException from "../../../exceptions/databaseActionException";
|
||||||
import InternalException from "../../../exceptions/internalException";
|
import InternalException from "../../../exceptions/internalException";
|
||||||
|
import ProtocolDecisionService from "../../../service/club/protocol/protocolDecisionService";
|
||||||
import { SynchronizeProtocolDecisionCommand } from "./protocolDecisionCommand";
|
import { SynchronizeProtocolDecisionCommand } from "./protocolDecisionCommand";
|
||||||
|
|
||||||
export default abstract class ProtocolDecisionCommandHandler {
|
export default abstract class ProtocolDecisionCommandHandler {
|
||||||
|
@ -11,6 +12,7 @@ export default abstract class ProtocolDecisionCommandHandler {
|
||||||
* @returns {Promise<number>}
|
* @returns {Promise<number>}
|
||||||
*/
|
*/
|
||||||
static async create(protocolId: number): Promise<number> {
|
static async create(protocolId: number): Promise<number> {
|
||||||
|
let count = await ProtocolDecisionService.getInstanceCount(protocolId);
|
||||||
return await dataSource
|
return await dataSource
|
||||||
.createQueryBuilder()
|
.createQueryBuilder()
|
||||||
.insert()
|
.insert()
|
||||||
|
@ -18,6 +20,7 @@ export default abstract class ProtocolDecisionCommandHandler {
|
||||||
.values({
|
.values({
|
||||||
topic: "",
|
topic: "",
|
||||||
context: "",
|
context: "",
|
||||||
|
sort: count,
|
||||||
protocolId,
|
protocolId,
|
||||||
})
|
})
|
||||||
.execute()
|
.execute()
|
||||||
|
@ -39,7 +42,7 @@ export default abstract class ProtocolDecisionCommandHandler {
|
||||||
.insert()
|
.insert()
|
||||||
.into(protocolDecision)
|
.into(protocolDecision)
|
||||||
.values(syncProtocolDecisions)
|
.values(syncProtocolDecisions)
|
||||||
.orUpdate(["topic", "context"], ["id"])
|
.orUpdate(["topic", "context", "sort"], ["id"])
|
||||||
.execute()
|
.execute()
|
||||||
.then(() => {})
|
.then(() => {})
|
||||||
.catch((err) => {
|
.catch((err) => {
|
||||||
|
|
|
@ -5,5 +5,6 @@ export interface SynchronizeProtocolVotingCommand {
|
||||||
favour: number;
|
favour: number;
|
||||||
abstain: number;
|
abstain: number;
|
||||||
against: number;
|
against: number;
|
||||||
|
sort?: number;
|
||||||
protocolId: number;
|
protocolId: number;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@ import { dataSource } from "../../../data-source";
|
||||||
import { protocolVoting } from "../../../entity/club/protocol/protocolVoting";
|
import { protocolVoting } from "../../../entity/club/protocol/protocolVoting";
|
||||||
import DatabaseActionException from "../../../exceptions/databaseActionException";
|
import DatabaseActionException from "../../../exceptions/databaseActionException";
|
||||||
import InternalException from "../../../exceptions/internalException";
|
import InternalException from "../../../exceptions/internalException";
|
||||||
|
import ProtocolVotingService from "../../../service/club/protocol/protocolVotingService";
|
||||||
import { SynchronizeProtocolVotingCommand } from "./protocolVotingCommand";
|
import { SynchronizeProtocolVotingCommand } from "./protocolVotingCommand";
|
||||||
|
|
||||||
export default abstract class ProtocolVotingCommandHandler {
|
export default abstract class ProtocolVotingCommandHandler {
|
||||||
|
@ -11,6 +12,7 @@ export default abstract class ProtocolVotingCommandHandler {
|
||||||
* @returns {Promise<number>}
|
* @returns {Promise<number>}
|
||||||
*/
|
*/
|
||||||
static async create(protocolId: number): Promise<number> {
|
static async create(protocolId: number): Promise<number> {
|
||||||
|
let count = await ProtocolVotingService.getInstanceCount(protocolId);
|
||||||
return await dataSource
|
return await dataSource
|
||||||
.createQueryBuilder()
|
.createQueryBuilder()
|
||||||
.insert()
|
.insert()
|
||||||
|
@ -18,6 +20,7 @@ export default abstract class ProtocolVotingCommandHandler {
|
||||||
.values({
|
.values({
|
||||||
topic: "",
|
topic: "",
|
||||||
context: "",
|
context: "",
|
||||||
|
sort: count,
|
||||||
protocolId,
|
protocolId,
|
||||||
})
|
})
|
||||||
.execute()
|
.execute()
|
||||||
|
@ -39,7 +42,7 @@ export default abstract class ProtocolVotingCommandHandler {
|
||||||
.insert()
|
.insert()
|
||||||
.into(protocolVoting)
|
.into(protocolVoting)
|
||||||
.values(syncProtocolVotings)
|
.values(syncProtocolVotings)
|
||||||
.orUpdate(["topic", "context", "favour", "abstain", "against"], ["id"])
|
.orUpdate(["topic", "context", "favour", "abstain", "against", "sort"], ["id"])
|
||||||
.execute()
|
.execute()
|
||||||
.then(() => {})
|
.then(() => {})
|
||||||
.catch((err) => {
|
.catch((err) => {
|
||||||
|
|
|
@ -257,13 +257,13 @@ export async function createProtocolPrintoutById(req: Request, res: Response): P
|
||||||
}),
|
}),
|
||||||
start: protocol.starttime,
|
start: protocol.starttime,
|
||||||
end: protocol.endtime,
|
end: protocol.endtime,
|
||||||
agenda,
|
agenda: agenda.sort((a, b) => a.sort - b.sort),
|
||||||
decisions,
|
decisions: decisions.sort((a, b) => a.sort - b.sort),
|
||||||
presence: presence.filter((p) => !p.absent).map((p) => p.member),
|
presence: presence.filter((p) => !p.absent).map((p) => p.member),
|
||||||
absent: presence.filter((p) => p.absent).map((p) => ({ ...p.member, excused: p.excused })),
|
absent: presence.filter((p) => p.absent).map((p) => ({ ...p.member, excused: p.excused })),
|
||||||
excused_absent: presence.filter((p) => p.absent && p.excused).map((p) => p.member),
|
excused_absent: presence.filter((p) => p.absent && p.excused).map((p) => p.member),
|
||||||
unexcused_absent: presence.filter((p) => p.absent && !p.excused).map((p) => p.member),
|
unexcused_absent: presence.filter((p) => p.absent && !p.excused).map((p) => p.member),
|
||||||
votings,
|
votings: votings.sort((a, b) => a.sort - b.sort),
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -320,6 +320,7 @@ export async function synchronizeProtocolAgendaById(req: Request, res: Response)
|
||||||
id: a.id ?? null,
|
id: a.id ?? null,
|
||||||
topic: a.topic,
|
topic: a.topic,
|
||||||
context: a.context,
|
context: a.context,
|
||||||
|
sort: a.sort,
|
||||||
protocolId,
|
protocolId,
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
@ -343,6 +344,7 @@ export async function synchronizeProtocolDecisonsById(req: Request, res: Respons
|
||||||
id: d.id ?? null,
|
id: d.id ?? null,
|
||||||
topic: d.topic,
|
topic: d.topic,
|
||||||
context: d.context,
|
context: d.context,
|
||||||
|
sort: d.sort,
|
||||||
protocolId,
|
protocolId,
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
@ -362,13 +364,14 @@ export async function synchronizeProtocolVotingsById(req: Request, res: Response
|
||||||
let votings = req.body.votings as Array<ProtocolVotingViewModel>;
|
let votings = req.body.votings as Array<ProtocolVotingViewModel>;
|
||||||
|
|
||||||
let syncVoting: Array<SynchronizeProtocolVotingCommand> = votings.map(
|
let syncVoting: Array<SynchronizeProtocolVotingCommand> = votings.map(
|
||||||
(d: ProtocolVotingViewModel): SynchronizeProtocolVotingCommand => ({
|
(v: ProtocolVotingViewModel): SynchronizeProtocolVotingCommand => ({
|
||||||
id: d.id ?? null,
|
id: v.id ?? null,
|
||||||
topic: d.topic,
|
topic: v.topic,
|
||||||
context: d.context,
|
context: v.context,
|
||||||
favour: d.favour,
|
favour: v.favour,
|
||||||
abstain: d.abstain,
|
abstain: v.abstain,
|
||||||
against: d.abstain,
|
against: v.abstain,
|
||||||
|
sort: v.sort,
|
||||||
protocolId,
|
protocolId,
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
|
|
@ -49,6 +49,7 @@ import { BackupAndResetDatabase1738166124200 } from "./migrations/1738166124200-
|
||||||
import { CreateSchema1738166167472 } from "./migrations/1738166167472-CreateSchema";
|
import { CreateSchema1738166167472 } from "./migrations/1738166167472-CreateSchema";
|
||||||
import { MemberPrintoutTemplates1742207245862 } from "./migrations/1742207245862-memberPrintoutTemplates";
|
import { MemberPrintoutTemplates1742207245862 } from "./migrations/1742207245862-memberPrintoutTemplates";
|
||||||
import { Listprinting1742311486232 } from "./migrations/1742311486232-listprinting";
|
import { Listprinting1742311486232 } from "./migrations/1742311486232-listprinting";
|
||||||
|
import { ProtocolSort1742544887410 } from "./migrations/1742544887410-protocolSort";
|
||||||
|
|
||||||
const dataSource = new DataSource({
|
const dataSource = new DataSource({
|
||||||
type: DB_TYPE as any,
|
type: DB_TYPE as any,
|
||||||
|
@ -107,6 +108,7 @@ const dataSource = new DataSource({
|
||||||
CreateSchema1738166167472,
|
CreateSchema1738166167472,
|
||||||
MemberPrintoutTemplates1742207245862,
|
MemberPrintoutTemplates1742207245862,
|
||||||
Listprinting1742311486232,
|
Listprinting1742311486232,
|
||||||
|
ProtocolSort1742544887410,
|
||||||
],
|
],
|
||||||
migrationsRun: true,
|
migrationsRun: true,
|
||||||
migrationsTransactionMode: "each",
|
migrationsTransactionMode: "each",
|
||||||
|
|
|
@ -12,6 +12,9 @@ export class protocolAgenda {
|
||||||
@Column({ type: "text", default: "" })
|
@Column({ type: "text", default: "" })
|
||||||
context: string;
|
context: string;
|
||||||
|
|
||||||
|
@Column({ type: "int", default: 0 })
|
||||||
|
sort: number;
|
||||||
|
|
||||||
@Column()
|
@Column()
|
||||||
protocolId: number;
|
protocolId: number;
|
||||||
|
|
||||||
|
|
|
@ -12,6 +12,9 @@ export class protocolDecision {
|
||||||
@Column({ type: "text", default: "" })
|
@Column({ type: "text", default: "" })
|
||||||
context: string;
|
context: string;
|
||||||
|
|
||||||
|
@Column({ type: "int", default: 0 })
|
||||||
|
sort: number;
|
||||||
|
|
||||||
@Column()
|
@Column()
|
||||||
protocolId: number;
|
protocolId: number;
|
||||||
|
|
||||||
|
|
|
@ -21,6 +21,9 @@ export class protocolVoting {
|
||||||
@Column({ type: "int", default: 0 })
|
@Column({ type: "int", default: 0 })
|
||||||
against: number;
|
against: number;
|
||||||
|
|
||||||
|
@Column({ type: "int", default: 0 })
|
||||||
|
sort: number;
|
||||||
|
|
||||||
@Column()
|
@Column()
|
||||||
protocolId: number;
|
protocolId: number;
|
||||||
|
|
||||||
|
|
|
@ -12,6 +12,7 @@ export default abstract class ProtocolAgendaFactory {
|
||||||
id: record.id,
|
id: record.id,
|
||||||
topic: record.topic,
|
topic: record.topic,
|
||||||
context: record.context,
|
context: record.context,
|
||||||
|
sort: record.sort,
|
||||||
protocolId: record.protocolId,
|
protocolId: record.protocolId,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,6 +12,7 @@ export default abstract class ProtocolDecisionFactory {
|
||||||
id: record.id,
|
id: record.id,
|
||||||
topic: record.topic,
|
topic: record.topic,
|
||||||
context: record.context,
|
context: record.context,
|
||||||
|
sort: record.sort,
|
||||||
protocolId: record.protocolId,
|
protocolId: record.protocolId,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,6 +15,7 @@ export default abstract class ProtocolVotingFactory {
|
||||||
favour: record.favour,
|
favour: record.favour,
|
||||||
abstain: record.abstain,
|
abstain: record.abstain,
|
||||||
against: record.against,
|
against: record.against,
|
||||||
|
sort: record.sort,
|
||||||
protocolId: record.protocolId,
|
protocolId: record.protocolId,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -300,8 +300,8 @@ export default abstract class BackupHelper {
|
||||||
.leftJoin("protocol.printouts", "printouts")
|
.leftJoin("protocol.printouts", "printouts")
|
||||||
.leftJoin("protocol.votings", "votings")
|
.leftJoin("protocol.votings", "votings")
|
||||||
.select(["protocol.title", "protocol.date", "protocol.starttime", "protocol.endtime", "protocol.summary"])
|
.select(["protocol.title", "protocol.date", "protocol.starttime", "protocol.endtime", "protocol.summary"])
|
||||||
.addSelect(["agendas.topic", "agendas.context"])
|
.addSelect(["agendas.topic", "agendas.context", "agendas.sort"])
|
||||||
.addSelect(["decisions.topic", "decisions.context"])
|
.addSelect(["decisions.topic", "decisions.context", "decisions.sort"])
|
||||||
.addSelect(["presences.absent", "presences.excused"])
|
.addSelect(["presences.absent", "presences.excused"])
|
||||||
.addSelect([
|
.addSelect([
|
||||||
...(collectIds ? ["member.id"] : []),
|
...(collectIds ? ["member.id"] : []),
|
||||||
|
@ -312,7 +312,14 @@ export default abstract class BackupHelper {
|
||||||
"member.internalId",
|
"member.internalId",
|
||||||
])
|
])
|
||||||
.addSelect(["printouts.title", "printouts.iteration", "printouts.filename", "printouts.createdAt"])
|
.addSelect(["printouts.title", "printouts.iteration", "printouts.filename", "printouts.createdAt"])
|
||||||
.addSelect(["votings.topic", "votings.context", "votings.favour", "votings.abstain", "votings.against"])
|
.addSelect([
|
||||||
|
"votings.topic",
|
||||||
|
"votings.context",
|
||||||
|
"votings.favour",
|
||||||
|
"votings.abstain",
|
||||||
|
"votings.against",
|
||||||
|
"votings.sort",
|
||||||
|
])
|
||||||
.getMany();
|
.getMany();
|
||||||
}
|
}
|
||||||
private static async getNewsletter(collectIds: boolean): Promise<Array<any>> {
|
private static async getNewsletter(collectIds: boolean): Promise<Array<any>> {
|
||||||
|
|
29
src/migrations/1742544887410-protocolSort.ts
Normal file
29
src/migrations/1742544887410-protocolSort.ts
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
import { MigrationInterface, QueryRunner, TableColumn } from "typeorm";
|
||||||
|
import { getDefaultByORM, getTypeByORM } from "./ormHelper";
|
||||||
|
|
||||||
|
export class ProtocolSort1742544887410 implements MigrationInterface {
|
||||||
|
name = "ProtocolSort1742544887410";
|
||||||
|
|
||||||
|
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||||
|
await queryRunner.addColumn(
|
||||||
|
"protocol_agenda",
|
||||||
|
new TableColumn({ name: "sort", ...getTypeByORM("int"), default: getDefaultByORM("number", 0) })
|
||||||
|
);
|
||||||
|
|
||||||
|
await queryRunner.addColumn(
|
||||||
|
"protocol_decision",
|
||||||
|
new TableColumn({ name: "sort", ...getTypeByORM("int"), default: getDefaultByORM("number", 0) })
|
||||||
|
);
|
||||||
|
|
||||||
|
await queryRunner.addColumn(
|
||||||
|
"protocol_voting",
|
||||||
|
new TableColumn({ name: "sort", ...getTypeByORM("int"), default: getDefaultByORM("number", 0) })
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||||
|
await queryRunner.dropColumn("protocol_agenda", "sort");
|
||||||
|
await queryRunner.dropColumn("protocol_decision", "sort");
|
||||||
|
await queryRunner.dropColumn("protocol_voting", "sort");
|
||||||
|
}
|
||||||
|
}
|
|
@ -39,4 +39,22 @@ export default abstract class ProtocolAgendaService {
|
||||||
throw new DatabaseActionException("SELECT", "protocolAgenda", err);
|
throw new DatabaseActionException("SELECT", "protocolAgenda", err);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description get count of exisiting protocolAgenda by protocolId
|
||||||
|
* @returns {Promise<number>}
|
||||||
|
*/
|
||||||
|
static async getInstanceCount(protocolId: number): Promise<number> {
|
||||||
|
return await dataSource
|
||||||
|
.getRepository(protocolAgenda)
|
||||||
|
.createQueryBuilder("protocolAgenda")
|
||||||
|
.where({ protocolId })
|
||||||
|
.getCount()
|
||||||
|
.then((res) => {
|
||||||
|
return res;
|
||||||
|
})
|
||||||
|
.catch((err) => {
|
||||||
|
throw new DatabaseActionException("COUNT", "protocolAgenda", err);
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,4 +39,22 @@ export default abstract class ProtocolDecisionService {
|
||||||
throw new DatabaseActionException("SELECT", "protocolDecision", err);
|
throw new DatabaseActionException("SELECT", "protocolDecision", err);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description get count of exisiting protocolDecision by protocolId
|
||||||
|
* @returns {Promise<number>}
|
||||||
|
*/
|
||||||
|
static async getInstanceCount(protocolId: number): Promise<number> {
|
||||||
|
return await dataSource
|
||||||
|
.getRepository(protocolDecision)
|
||||||
|
.createQueryBuilder("protocolDecisions")
|
||||||
|
.where({ protocolId })
|
||||||
|
.getCount()
|
||||||
|
.then((res) => {
|
||||||
|
return res;
|
||||||
|
})
|
||||||
|
.catch((err) => {
|
||||||
|
throw new DatabaseActionException("COUNT", "protocolDecision", err);
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,4 +39,22 @@ export default abstract class ProtocolVotingService {
|
||||||
throw new DatabaseActionException("SELECT", "protocolVoting", err);
|
throw new DatabaseActionException("SELECT", "protocolVoting", err);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description get count of exisiting protocolVoting by protocolId
|
||||||
|
* @returns {Promise<number>}
|
||||||
|
*/
|
||||||
|
static async getInstanceCount(protocolId: number): Promise<number> {
|
||||||
|
return await dataSource
|
||||||
|
.getRepository(protocolVoting)
|
||||||
|
.createQueryBuilder("protocolVotings")
|
||||||
|
.where({ protocolId })
|
||||||
|
.getCount()
|
||||||
|
.then((res) => {
|
||||||
|
return res;
|
||||||
|
})
|
||||||
|
.catch((err) => {
|
||||||
|
throw new DatabaseActionException("COUNT", "protocolVoting", err);
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,5 +2,6 @@ export interface ProtocolAgendaViewModel {
|
||||||
id: number;
|
id: number;
|
||||||
topic: string;
|
topic: string;
|
||||||
context: string;
|
context: string;
|
||||||
|
sort: number;
|
||||||
protocolId: number;
|
protocolId: number;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,5 +2,6 @@ export interface ProtocolDecisionViewModel {
|
||||||
id: number;
|
id: number;
|
||||||
topic: string;
|
topic: string;
|
||||||
context: string;
|
context: string;
|
||||||
|
sort: number;
|
||||||
protocolId: number;
|
protocolId: number;
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,5 +5,6 @@ export interface ProtocolVotingViewModel {
|
||||||
favour: number;
|
favour: number;
|
||||||
abstain: number;
|
abstain: number;
|
||||||
against: number;
|
against: number;
|
||||||
|
sort: number;
|
||||||
protocolId: number;
|
protocolId: number;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue