fac-shared-db 1.4.0 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -48,7 +48,6 @@ O script `prepare` compila o TypeScript automaticamente após `npm install`.
48
48
  | `MensagemRecrutamentoModel` | `mensagemrecrutamentos` | Singleton (`_id: "RECRUTAMENTO"`): texto de recrutamento vigente |
49
49
  | `MensagemRotacaoModel` | `mensagemrotacaos` | Mensagens que rotacionam em canais |
50
50
  | `RegistroOlheiroModel` | `registroolheiros` | Registro de olheiro/recrutamento |
51
- | `UpRegistroModel` | `upregistros` | Registro de promoção (UP) de membro |
52
51
  | `VendaModel` | `vendas` | Registro de venda de munição |
53
52
  | `VendaConfigModel` | `vendaconfigs` | Singleton: preços e comissão de venda |
54
53
  | `KeyValueModel` | `keyvalues` | Storage genérico key-value |
@@ -0,0 +1,137 @@
1
+ import mongoose, { Document } from "mongoose";
2
+ /**
3
+ * Cidade RP (ex: Fluxo Roleplay, Valley Roleplay) — agrupa a config que é
4
+ * compartilhada entre todos os Servidores (facções) que operam nela: guild(s)
5
+ * Discord, cargo de menção fixo das ações, catálogo de cargos de facção e
6
+ * canais centralizados (marcar ação, castigo, etc). Sem isso esses mesmos IDs
7
+ * teriam que ser recadastrados em todo Servidor que atua na mesma cidade.
8
+ * Vive no banco PRÓPRIO do fac-control-bot, igual ao Servidor.
9
+ */
10
+ export interface ICidadeFaccao {
11
+ /** Nome de exibição da facção (ex: "🧙‍♀️Lords") */
12
+ nome: string;
13
+ /** ID do cargo Discord dessa facção, dentro do guildId da cidade */
14
+ cargoFaccaoId: string;
15
+ }
16
+ export interface ICidadeCanal {
17
+ /** Chave lógica usada como identificador (ex: "MARCAR_ACAO", "CASTIGO") */
18
+ key: string;
19
+ /** Label para exibição no painel admin */
20
+ label: string;
21
+ /** ID do canal Discord (snowflake). Vazio = não configurado */
22
+ channelId: string;
23
+ }
24
+ export interface ICidade extends Document {
25
+ /** Nome de exibição da cidade (ex: "Fluxo Roleplay") */
26
+ nome: string;
27
+ /** Guild Discord principal — onde vivem os cargos de facção, ações e castigo */
28
+ guildId: string;
29
+ /** Guild Discord dedicado a logs, quando a cidade usa um servidor separado do principal */
30
+ logsGuildId?: string;
31
+ /** Cargo pingado nas mensagens de ação — fixo por cidade (ex: cargo da PM) */
32
+ cargoMentionId: string;
33
+ /** Catálogo de cargos de facção conhecidos nessa cidade */
34
+ faccoes: ICidadeFaccao[];
35
+ /** Canais centralizados da cidade (marcar ação, castigo, etc) */
36
+ canais: ICidadeCanal[];
37
+ ativo: boolean;
38
+ criadoEm: Date;
39
+ }
40
+ export declare const CidadeSchema: mongoose.Schema<ICidade, mongoose.Model<ICidade, any, any, any, any, any, ICidade>, {}, {}, {}, {}, mongoose.DefaultSchemaOptions, ICidade, mongoose.Document<unknown, {}, ICidade, {
41
+ id: string;
42
+ }, mongoose.DefaultSchemaOptions> & Omit<ICidade & Required<{
43
+ _id: mongoose.Types.ObjectId;
44
+ }> & {
45
+ __v: number;
46
+ }, "id"> & {
47
+ id: string;
48
+ }, {
49
+ _id?: mongoose.SchemaDefinitionProperty<mongoose.Types.ObjectId, ICidade, mongoose.Document<unknown, {}, ICidade, {
50
+ id: string;
51
+ }, mongoose.DefaultSchemaOptions> & Omit<ICidade & Required<{
52
+ _id: mongoose.Types.ObjectId;
53
+ }> & {
54
+ __v: number;
55
+ }, "id"> & {
56
+ id: string;
57
+ }> | undefined;
58
+ nome?: mongoose.SchemaDefinitionProperty<string, ICidade, mongoose.Document<unknown, {}, ICidade, {
59
+ id: string;
60
+ }, mongoose.DefaultSchemaOptions> & Omit<ICidade & Required<{
61
+ _id: mongoose.Types.ObjectId;
62
+ }> & {
63
+ __v: number;
64
+ }, "id"> & {
65
+ id: string;
66
+ }> | undefined;
67
+ criadoEm?: mongoose.SchemaDefinitionProperty<Date, ICidade, mongoose.Document<unknown, {}, ICidade, {
68
+ id: string;
69
+ }, mongoose.DefaultSchemaOptions> & Omit<ICidade & Required<{
70
+ _id: mongoose.Types.ObjectId;
71
+ }> & {
72
+ __v: number;
73
+ }, "id"> & {
74
+ id: string;
75
+ }> | undefined;
76
+ guildId?: mongoose.SchemaDefinitionProperty<string, ICidade, mongoose.Document<unknown, {}, ICidade, {
77
+ id: string;
78
+ }, mongoose.DefaultSchemaOptions> & Omit<ICidade & Required<{
79
+ _id: mongoose.Types.ObjectId;
80
+ }> & {
81
+ __v: number;
82
+ }, "id"> & {
83
+ id: string;
84
+ }> | undefined;
85
+ logsGuildId?: mongoose.SchemaDefinitionProperty<string | undefined, ICidade, mongoose.Document<unknown, {}, ICidade, {
86
+ id: string;
87
+ }, mongoose.DefaultSchemaOptions> & Omit<ICidade & Required<{
88
+ _id: mongoose.Types.ObjectId;
89
+ }> & {
90
+ __v: number;
91
+ }, "id"> & {
92
+ id: string;
93
+ }> | undefined;
94
+ cargoMentionId?: mongoose.SchemaDefinitionProperty<string, ICidade, mongoose.Document<unknown, {}, ICidade, {
95
+ id: string;
96
+ }, mongoose.DefaultSchemaOptions> & Omit<ICidade & Required<{
97
+ _id: mongoose.Types.ObjectId;
98
+ }> & {
99
+ __v: number;
100
+ }, "id"> & {
101
+ id: string;
102
+ }> | undefined;
103
+ faccoes?: mongoose.SchemaDefinitionProperty<ICidadeFaccao[], ICidade, mongoose.Document<unknown, {}, ICidade, {
104
+ id: string;
105
+ }, mongoose.DefaultSchemaOptions> & Omit<ICidade & Required<{
106
+ _id: mongoose.Types.ObjectId;
107
+ }> & {
108
+ __v: number;
109
+ }, "id"> & {
110
+ id: string;
111
+ }> | undefined;
112
+ canais?: mongoose.SchemaDefinitionProperty<ICidadeCanal[], ICidade, mongoose.Document<unknown, {}, ICidade, {
113
+ id: string;
114
+ }, mongoose.DefaultSchemaOptions> & Omit<ICidade & Required<{
115
+ _id: mongoose.Types.ObjectId;
116
+ }> & {
117
+ __v: number;
118
+ }, "id"> & {
119
+ id: string;
120
+ }> | undefined;
121
+ ativo?: mongoose.SchemaDefinitionProperty<boolean, ICidade, mongoose.Document<unknown, {}, ICidade, {
122
+ id: string;
123
+ }, mongoose.DefaultSchemaOptions> & Omit<ICidade & Required<{
124
+ _id: mongoose.Types.ObjectId;
125
+ }> & {
126
+ __v: number;
127
+ }, "id"> & {
128
+ id: string;
129
+ }> | undefined;
130
+ }, ICidade>;
131
+ export declare const CidadeModel: mongoose.Model<ICidade, {}, {}, {}, mongoose.Document<unknown, {}, ICidade, {}, mongoose.DefaultSchemaOptions> & ICidade & Required<{
132
+ _id: mongoose.Types.ObjectId;
133
+ }> & {
134
+ __v: number;
135
+ } & {
136
+ id: string;
137
+ }, any, ICidade>;
@@ -0,0 +1,21 @@
1
+ import mongoose, { Schema } from "mongoose";
2
+ const CidadeFaccaoSchema = new Schema({
3
+ nome: { type: String, required: true },
4
+ cargoFaccaoId: { type: String, required: true },
5
+ }, { _id: false });
6
+ const CidadeCanalSchema = new Schema({
7
+ key: { type: String, required: true },
8
+ label: { type: String, required: true },
9
+ channelId: { type: String, default: "" },
10
+ }, { _id: false });
11
+ export const CidadeSchema = new Schema({
12
+ nome: { type: String, required: true },
13
+ guildId: { type: String, required: true },
14
+ logsGuildId: { type: String },
15
+ cargoMentionId: { type: String, required: true },
16
+ faccoes: { type: [CidadeFaccaoSchema], default: [] },
17
+ canais: { type: [CidadeCanalSchema], default: [] },
18
+ ativo: { type: Boolean, default: true },
19
+ criadoEm: { type: Date, default: Date.now },
20
+ });
21
+ export const CidadeModel = mongoose.model("Cidade", CidadeSchema);
@@ -19,6 +19,10 @@ export interface IServidor extends Document {
19
19
  channelId: string;
20
20
  /** Token do self-bot dedicado deste servidor, usado pelo fac-helper-bot pra operar nele */
21
21
  helperBotToken?: string;
22
+ /** Cidade RP em que esse servidor/facção atua (ref Cidade) — de onde vem guild/canais/cargos compartilhados */
23
+ cidadeId?: mongoose.Types.ObjectId;
24
+ /** Nome da facção dentro do catálogo da cidade (Cidade.faccoes[].nome), pra resolver o cargoFaccaoId */
25
+ faccaoNome?: string;
22
26
  ativo: boolean;
23
27
  criadoEm: Date;
24
28
  }
@@ -112,6 +116,24 @@ export declare const ServidorSchema: mongoose.Schema<IServidor, mongoose.Model<I
112
116
  }, "id"> & {
113
117
  id: string;
114
118
  }> | undefined;
119
+ cidadeId?: mongoose.SchemaDefinitionProperty<mongoose.Types.ObjectId | undefined, IServidor, mongoose.Document<unknown, {}, IServidor, {
120
+ id: string;
121
+ }, mongoose.DefaultSchemaOptions> & Omit<IServidor & Required<{
122
+ _id: mongoose.Types.ObjectId;
123
+ }> & {
124
+ __v: number;
125
+ }, "id"> & {
126
+ id: string;
127
+ }> | undefined;
128
+ faccaoNome?: mongoose.SchemaDefinitionProperty<string | undefined, IServidor, mongoose.Document<unknown, {}, IServidor, {
129
+ id: string;
130
+ }, mongoose.DefaultSchemaOptions> & Omit<IServidor & Required<{
131
+ _id: mongoose.Types.ObjectId;
132
+ }> & {
133
+ __v: number;
134
+ }, "id"> & {
135
+ id: string;
136
+ }> | undefined;
115
137
  }, IServidor>;
116
138
  export declare const ServidorModel: mongoose.Model<IServidor, {}, {}, {}, mongoose.Document<unknown, {}, IServidor, {}, mongoose.DefaultSchemaOptions> & IServidor & Required<{
117
139
  _id: mongoose.Types.ObjectId;
@@ -6,6 +6,8 @@ export const ServidorSchema = new Schema({
6
6
  webhookAvisosUrl: { type: String, required: true },
7
7
  channelId: { type: String, required: true },
8
8
  helperBotToken: { type: String },
9
+ cidadeId: { type: Schema.Types.ObjectId, ref: "Cidade" },
10
+ faccaoNome: { type: String },
9
11
  ativo: { type: Boolean, default: true },
10
12
  criadoEm: { type: Date, default: Date.now },
11
13
  });
@@ -18,6 +18,8 @@ export { CanalConfigModel } from "./CanalConfig.js";
18
18
  export type { ICanalConfig } from "./CanalConfig.js";
19
19
  export { CargoConfigModel } from "./CargoConfig.js";
20
20
  export type { ICargoConfig } from "./CargoConfig.js";
21
+ export { CidadeModel, CidadeSchema } from "./Cidade.js";
22
+ export type { ICidade, ICidadeCanal, ICidadeFaccao } from "./Cidade.js";
21
23
  export { CraftConfigModel } from "./CraftConfig.js";
22
24
  export type { ICraftConfig } from "./CraftConfig.js";
23
25
  export { FarmModel } from "./Farm.js";
@@ -34,8 +36,6 @@ export { MensagemRotacaoModel } from "./MensagemRotacao.js";
34
36
  export type { IMensagemRotacao } from "./MensagemRotacao.js";
35
37
  export { ServidorModel, ServidorSchema } from "./Servidor.js";
36
38
  export type { IServidor } from "./Servidor.js";
37
- export { MarcarAcaoGuildConfigModel, MarcarAcaoGuildConfigSchema } from "./MarcarAcaoGuildConfig.js";
38
- export type { IMarcarAcaoGuildConfig } from "./MarcarAcaoGuildConfig.js";
39
39
  export { PedirRecGuildConfigModel, PedirRecGuildConfigSchema } from "./PedirRecGuildConfig.js";
40
40
  export type { IPedirRecGuildConfig } from "./PedirRecGuildConfig.js";
41
41
  export { LogsExporterGuildConfigModel, LogsExporterGuildConfigSchema } from "./LogsExporterGuildConfig.js";
@@ -44,8 +44,6 @@ export { RegistroOlheiroModel } from "./RegistroOlheiro.js";
44
44
  export type { IRegistroOlheiro } from "./RegistroOlheiro.js";
45
45
  export { SolicitacaoUpModel } from "./SolicitacaoUp.js";
46
46
  export type { ISolicitacaoUp } from "./SolicitacaoUp.js";
47
- export { UpRegistroModel } from "./UpRegistro.js";
48
- export type { IUpRegistro } from "./UpRegistro.js";
49
47
  export { VendaModel } from "./Venda.js";
50
48
  export type { IVenda } from "./Venda.js";
51
49
  export { VendaConfigModel } from "./VendaConfig.js";
@@ -8,6 +8,7 @@ export { BotConfigModel } from "./BotConfig.js";
8
8
  export { Caixa2ItemModel, Caixa2ItemSchema } from "./Caixa2Item.js";
9
9
  export { CanalConfigModel } from "./CanalConfig.js";
10
10
  export { CargoConfigModel } from "./CargoConfig.js";
11
+ export { CidadeModel, CidadeSchema } from "./Cidade.js";
11
12
  export { CraftConfigModel } from "./CraftConfig.js";
12
13
  export { FarmModel } from "./Farm.js";
13
14
  export { FarmValidacaoStateModel } from "./FarmValidacaoState.js";
@@ -16,12 +17,10 @@ export { MembroCadastroModel } from "./MembroCadastro.js";
16
17
  export { MensagemRecrutamentoModel, MensagemRecrutamentoSchema } from "./MensagemRecrutamento.js";
17
18
  export { MensagemRotacaoModel } from "./MensagemRotacao.js";
18
19
  export { ServidorModel, ServidorSchema } from "./Servidor.js";
19
- export { MarcarAcaoGuildConfigModel, MarcarAcaoGuildConfigSchema } from "./MarcarAcaoGuildConfig.js";
20
20
  export { PedirRecGuildConfigModel, PedirRecGuildConfigSchema } from "./PedirRecGuildConfig.js";
21
21
  export { LogsExporterGuildConfigModel, LogsExporterGuildConfigSchema } from "./LogsExporterGuildConfig.js";
22
22
  export { RegistroOlheiroModel } from "./RegistroOlheiro.js";
23
23
  export { SolicitacaoUpModel } from "./SolicitacaoUp.js";
24
- export { UpRegistroModel } from "./UpRegistro.js";
25
24
  export { VendaModel } from "./Venda.js";
26
25
  export { VendaConfigModel } from "./VendaConfig.js";
27
26
  export { KeyValueModel, KeyValueSchema } from "./KeyValue.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fac-shared-db",
3
- "version": "1.4.0",
3
+ "version": "1.6.0",
4
4
  "type": "module",
5
5
  "main": "build/index.js",
6
6
  "types": "build/index.d.ts",
@@ -1,74 +0,0 @@
1
- import mongoose, { type Document } from "mongoose";
2
- /**
3
- * Config do domínio marcarAcao (fac-helper-bot), por tenant — vive dentro do
4
- * banco do próprio cliente (mesmo padrão de BotConfig/CanalConfig). Singleton
5
- * via configId fixo, vinculado a uma connection alternativa via modelOn().
6
- */
7
- export interface IMarcarAcaoGuildConfig extends Document {
8
- configId: string;
9
- channelId: string;
10
- cargoFaccaoId: string;
11
- cargoMentionId: string;
12
- }
13
- export declare const MarcarAcaoGuildConfigSchema: mongoose.Schema<IMarcarAcaoGuildConfig, mongoose.Model<IMarcarAcaoGuildConfig, any, any, any, any, any, IMarcarAcaoGuildConfig>, {}, {}, {}, {}, mongoose.DefaultSchemaOptions, IMarcarAcaoGuildConfig, mongoose.Document<unknown, {}, IMarcarAcaoGuildConfig, {
14
- id: string;
15
- }, mongoose.DefaultSchemaOptions> & Omit<IMarcarAcaoGuildConfig & Required<{
16
- _id: mongoose.Types.ObjectId;
17
- }> & {
18
- __v: number;
19
- }, "id"> & {
20
- id: string;
21
- }, {
22
- _id?: mongoose.SchemaDefinitionProperty<mongoose.Types.ObjectId, IMarcarAcaoGuildConfig, mongoose.Document<unknown, {}, IMarcarAcaoGuildConfig, {
23
- id: string;
24
- }, mongoose.DefaultSchemaOptions> & Omit<IMarcarAcaoGuildConfig & Required<{
25
- _id: mongoose.Types.ObjectId;
26
- }> & {
27
- __v: number;
28
- }, "id"> & {
29
- id: string;
30
- }> | undefined;
31
- configId?: mongoose.SchemaDefinitionProperty<string, IMarcarAcaoGuildConfig, mongoose.Document<unknown, {}, IMarcarAcaoGuildConfig, {
32
- id: string;
33
- }, mongoose.DefaultSchemaOptions> & Omit<IMarcarAcaoGuildConfig & Required<{
34
- _id: mongoose.Types.ObjectId;
35
- }> & {
36
- __v: number;
37
- }, "id"> & {
38
- id: string;
39
- }> | undefined;
40
- channelId?: mongoose.SchemaDefinitionProperty<string, IMarcarAcaoGuildConfig, mongoose.Document<unknown, {}, IMarcarAcaoGuildConfig, {
41
- id: string;
42
- }, mongoose.DefaultSchemaOptions> & Omit<IMarcarAcaoGuildConfig & Required<{
43
- _id: mongoose.Types.ObjectId;
44
- }> & {
45
- __v: number;
46
- }, "id"> & {
47
- id: string;
48
- }> | undefined;
49
- cargoFaccaoId?: mongoose.SchemaDefinitionProperty<string, IMarcarAcaoGuildConfig, mongoose.Document<unknown, {}, IMarcarAcaoGuildConfig, {
50
- id: string;
51
- }, mongoose.DefaultSchemaOptions> & Omit<IMarcarAcaoGuildConfig & Required<{
52
- _id: mongoose.Types.ObjectId;
53
- }> & {
54
- __v: number;
55
- }, "id"> & {
56
- id: string;
57
- }> | undefined;
58
- cargoMentionId?: mongoose.SchemaDefinitionProperty<string, IMarcarAcaoGuildConfig, mongoose.Document<unknown, {}, IMarcarAcaoGuildConfig, {
59
- id: string;
60
- }, mongoose.DefaultSchemaOptions> & Omit<IMarcarAcaoGuildConfig & Required<{
61
- _id: mongoose.Types.ObjectId;
62
- }> & {
63
- __v: number;
64
- }, "id"> & {
65
- id: string;
66
- }> | undefined;
67
- }, IMarcarAcaoGuildConfig>;
68
- export declare const MarcarAcaoGuildConfigModel: mongoose.Model<IMarcarAcaoGuildConfig, {}, {}, {}, mongoose.Document<unknown, {}, IMarcarAcaoGuildConfig, {}, mongoose.DefaultSchemaOptions> & IMarcarAcaoGuildConfig & Required<{
69
- _id: mongoose.Types.ObjectId;
70
- }> & {
71
- __v: number;
72
- } & {
73
- id: string;
74
- }, any, IMarcarAcaoGuildConfig>;
@@ -1,8 +0,0 @@
1
- import mongoose, { Schema } from "mongoose";
2
- export const MarcarAcaoGuildConfigSchema = new Schema({
3
- configId: { type: String, default: "main", unique: true },
4
- channelId: { type: String, required: true },
5
- cargoFaccaoId: { type: String, required: true },
6
- cargoMentionId: { type: String, required: true },
7
- });
8
- export const MarcarAcaoGuildConfigModel = mongoose.model("MarcarAcaoGuildConfig", MarcarAcaoGuildConfigSchema);
@@ -1,20 +0,0 @@
1
- import mongoose, { Document } from "mongoose";
2
- export interface IUpRegistro extends Document {
3
- /** Discord ID do solicitante (gerente que pediu o UP) */
4
- solicitanteId: string;
5
- /** Discord ID do membro promovido */
6
- membroId: string;
7
- /** ID do cargo para o qual foi promovido */
8
- cargoSolicitadoId: string;
9
- /** Discord ID de quem aprovou o UP */
10
- aprovadoPorId?: string;
11
- /** Data da aprovação */
12
- aprovadoEm: Date;
13
- }
14
- export declare const UpRegistroModel: mongoose.Model<IUpRegistro, {}, {}, {}, mongoose.Document<unknown, {}, IUpRegistro, {}, mongoose.DefaultSchemaOptions> & IUpRegistro & Required<{
15
- _id: mongoose.Types.ObjectId;
16
- }> & {
17
- __v: number;
18
- } & {
19
- id: string;
20
- }, any, IUpRegistro>;
@@ -1,10 +0,0 @@
1
- import mongoose, { Schema } from "mongoose";
2
- const UpRegistroSchema = new Schema({
3
- solicitanteId: { type: String, required: true, index: true },
4
- membroId: { type: String, required: true },
5
- cargoSolicitadoId: { type: String, required: true },
6
- aprovadoPorId: { type: String, index: true },
7
- aprovadoEm: { type: Date, default: Date.now, index: true },
8
- });
9
- UpRegistroSchema.index({ solicitanteId: 1, aprovadoEm: 1 });
10
- export const UpRegistroModel = mongoose.model("UpRegistro", UpRegistroSchema);