Files
parcer/server/src/models/Robot.ts

139 lines
3.6 KiB
TypeScript
Raw Normal View History

2024-10-09 03:22:36 +05:30
import { Model, DataTypes, Optional } from 'sequelize';
2024-10-14 23:46:24 +05:30
import sequelize from '../storage/db';
2024-10-09 14:34:43 +05:30
import { WorkflowFile, Where, What, WhereWhatPair } from 'maxun-core';
2024-10-09 03:22:36 +05:30
2024-10-09 03:59:31 +05:30
interface RobotMeta {
name: string;
id: string;
createdAt: string;
pairs: number;
updatedAt: string;
params: any[];
}
interface RobotWorkflow {
2024-10-09 14:34:43 +05:30
workflow: WhereWhatPair[];
}
2024-10-09 03:22:36 +05:30
interface RobotAttributes {
id: string;
2024-10-21 22:31:58 +05:30
userId?: number;
2024-10-09 03:59:31 +05:30
recording_meta: RobotMeta;
recording: RobotWorkflow;
google_sheet_email?: string | null;
google_sheet_name?: string | null;
2024-10-16 23:38:18 +05:30
google_sheet_id?: string | null;
google_access_token?: string | null;
google_refresh_token?: string | null;
2025-01-26 14:22:36 +05:30
airtable_base_id?: string | null; // New field for Airtable base ID
airtable_table_name?: string | null; // New field for Airtable table name
airtable_access_token?: string | null; // New field for Airtable access token
airtable_refresh_token?: string | null; // New field for Airtable refresh token
schedule?: ScheduleConfig | null;
2024-10-09 03:22:36 +05:30
}
2024-10-22 18:32:27 +05:30
interface ScheduleConfig {
runEvery: number;
runEveryUnit: 'MINUTES' | 'HOURS' | 'DAYS' | 'WEEKS' | 'MONTHS';
startFrom: 'SUNDAY' | 'MONDAY' | 'TUESDAY' | 'WEDNESDAY' | 'THURSDAY' | 'FRIDAY' | 'SATURDAY';
atTimeStart?: string;
atTimeEnd?: string;
timezone: string;
lastRunAt?: Date;
nextRunAt?: Date;
2024-10-29 00:59:11 +05:30
dayOfMonth?: string;
2024-10-22 18:32:27 +05:30
cronExpression?: string;
}
2024-10-09 14:34:58 +05:30
interface RobotCreationAttributes extends Optional<RobotAttributes, 'id'> { }
2024-10-09 03:22:36 +05:30
class Robot extends Model<RobotAttributes, RobotCreationAttributes> implements RobotAttributes {
public id!: string;
2024-10-21 22:31:58 +05:30
public userId!: number;
2024-10-09 03:59:31 +05:30
public recording_meta!: RobotMeta;
public recording!: RobotWorkflow;
public google_sheet_email!: string | null;
2025-01-26 14:22:36 +05:30
public google_sheet_name!: string | null;
public google_sheet_id!: string | null;
2024-10-16 23:38:18 +05:30
public google_access_token!: string | null;
public google_refresh_token!: string | null;
2025-01-26 14:22:36 +05:30
public airtable_base_id!: string | null; // New field for Airtable base ID
public airtable_table_name!: string | null; // New field for Airtable table name
public airtable_access_token!: string | null; // New field for Airtable access token
public airtable_refresh_token!: string | null; // New field for Airtable refresh token
public schedule!: ScheduleConfig | null;
2024-10-09 03:22:36 +05:30
}
Robot.init(
{
id: {
type: DataTypes.UUID,
defaultValue: DataTypes.UUIDV4,
primaryKey: true,
},
2024-10-21 20:39:42 +05:30
userId: {
2024-10-21 22:31:58 +05:30
type: DataTypes.INTEGER,
2024-10-21 20:39:42 +05:30
allowNull: false,
},
recording_meta: {
type: DataTypes.JSONB,
allowNull: false,
},
recording: {
type: DataTypes.JSONB,
allowNull: false,
2024-10-09 03:22:36 +05:30
},
google_sheet_email: {
2024-10-16 23:38:18 +05:30
type: DataTypes.STRING,
allowNull: true,
2024-10-16 23:38:34 +05:30
},
google_sheet_name: {
2024-10-17 19:22:14 +05:30
type: DataTypes.STRING,
allowNull: true,
},
2024-10-16 23:38:34 +05:30
google_sheet_id: {
2024-10-16 23:38:18 +05:30
type: DataTypes.STRING,
allowNull: true,
2024-10-16 23:38:34 +05:30
},
google_access_token: {
2024-10-16 23:38:18 +05:30
type: DataTypes.STRING,
allowNull: true,
2024-10-16 23:38:34 +05:30
},
google_refresh_token: {
2024-10-16 23:38:18 +05:30
type: DataTypes.STRING,
allowNull: true,
2024-10-16 23:38:34 +05:30
},
2025-01-26 14:22:36 +05:30
airtable_base_id: {
type: DataTypes.STRING,
allowNull: true,
},
airtable_table_name: {
type: DataTypes.STRING,
allowNull: true,
},
airtable_access_token: {
type: DataTypes.TEXT,
allowNull: true,
},
airtable_refresh_token: {
type: DataTypes.TEXT,
allowNull: true,
},
2024-10-22 18:34:38 +05:30
schedule: {
type: DataTypes.JSONB,
allowNull: true,
},
},
{
sequelize,
tableName: 'robot',
2024-10-09 14:34:58 +05:30
timestamps: false,
}
2024-10-09 03:22:36 +05:30
);
2024-10-21 20:38:37 +05:30
// Robot.hasMany(Run, {
// foreignKey: 'robotId',
// as: 'runs', // Alias for the relation
// });
2024-10-21 19:50:15 +05:30
2024-10-09 14:34:43 +05:30
export default Robot;