96 lines
2.2 KiB
JavaScript
96 lines
2.2 KiB
JavaScript
"use strict";
|
|
|
|
module.exports = {
|
|
up: async (queryInterface, Sequelize) => {
|
|
await queryInterface.createTable("ImageMetadata", {
|
|
id: {
|
|
type: Sequelize.UUID,
|
|
defaultValue: Sequelize.UUIDV4,
|
|
primaryKey: true,
|
|
},
|
|
s3Key: {
|
|
type: Sequelize.TEXT,
|
|
allowNull: false,
|
|
unique: true,
|
|
},
|
|
latitude: {
|
|
type: Sequelize.DECIMAL(10, 8),
|
|
allowNull: true,
|
|
},
|
|
longitude: {
|
|
type: Sequelize.DECIMAL(11, 8),
|
|
allowNull: true,
|
|
},
|
|
cameraMake: {
|
|
type: Sequelize.STRING(100),
|
|
allowNull: true,
|
|
},
|
|
cameraModel: {
|
|
type: Sequelize.STRING(100),
|
|
allowNull: true,
|
|
},
|
|
cameraSoftware: {
|
|
type: Sequelize.STRING(100),
|
|
allowNull: true,
|
|
},
|
|
dateTaken: {
|
|
type: Sequelize.DATE,
|
|
allowNull: true,
|
|
},
|
|
width: {
|
|
type: Sequelize.INTEGER,
|
|
allowNull: true,
|
|
},
|
|
height: {
|
|
type: Sequelize.INTEGER,
|
|
allowNull: true,
|
|
},
|
|
orientation: {
|
|
type: Sequelize.INTEGER,
|
|
allowNull: true,
|
|
},
|
|
fileSize: {
|
|
type: Sequelize.INTEGER,
|
|
allowNull: true,
|
|
},
|
|
processingStatus: {
|
|
type: Sequelize.ENUM("pending", "processing", "completed", "failed"),
|
|
allowNull: false,
|
|
defaultValue: "pending",
|
|
},
|
|
processedAt: {
|
|
type: Sequelize.DATE,
|
|
allowNull: true,
|
|
},
|
|
errorMessage: {
|
|
type: Sequelize.TEXT,
|
|
allowNull: true,
|
|
},
|
|
createdAt: {
|
|
type: Sequelize.DATE,
|
|
allowNull: false,
|
|
},
|
|
updatedAt: {
|
|
type: Sequelize.DATE,
|
|
allowNull: false,
|
|
},
|
|
});
|
|
|
|
// Add indexes
|
|
await queryInterface.addIndex("ImageMetadata", ["s3Key"], {
|
|
unique: true,
|
|
name: "image_metadata_s3_key_unique",
|
|
});
|
|
await queryInterface.addIndex("ImageMetadata", ["latitude", "longitude"], {
|
|
name: "image_metadata_geo",
|
|
});
|
|
await queryInterface.addIndex("ImageMetadata", ["processingStatus"], {
|
|
name: "image_metadata_processing_status",
|
|
});
|
|
},
|
|
|
|
down: async (queryInterface, Sequelize) => {
|
|
await queryInterface.dropTable("ImageMetadata");
|
|
},
|
|
};
|