73 lines
3.2 KiB
Go
73 lines
3.2 KiB
Go
//go:build mysql
|
|
// +build mysql
|
|
|
|
package mysql
|
|
|
|
import "github.com/jmoiron/sqlx"
|
|
|
|
func ensureIMTenantEntryControlTables(db *sqlx.DB) error {
|
|
statements := []string{
|
|
`CREATE TABLE IF NOT EXISTS im_public_uploads(
|
|
id BIGINT NOT NULL AUTO_INCREMENT,
|
|
file_id VARCHAR(64) NOT NULL,
|
|
purpose VARCHAR(64) NOT NULL,
|
|
mime_type VARCHAR(128) NOT NULL DEFAULT '',
|
|
size BIGINT NOT NULL DEFAULT 0,
|
|
etag VARCHAR(128) NOT NULL DEFAULT '',
|
|
location VARCHAR(2048) NOT NULL DEFAULT '',
|
|
expires_at DATETIME(3),
|
|
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
uploaded_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
PRIMARY KEY(id),
|
|
UNIQUE INDEX uk_im_public_uploads_file(file_id),
|
|
INDEX idx_im_public_uploads_purpose(purpose, created_at),
|
|
INDEX idx_im_public_uploads_expires(expires_at)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci`,
|
|
`CREATE TABLE IF NOT EXISTS im_tenant_applications(
|
|
id BIGINT NOT NULL AUTO_INCREMENT,
|
|
application_id VARCHAR(64) NOT NULL,
|
|
credit_code VARCHAR(18) NOT NULL,
|
|
enterprise_email VARCHAR(255) NOT NULL DEFAULT '',
|
|
license_file_id VARCHAR(64) NOT NULL DEFAULT '',
|
|
tenant_code_hint VARCHAR(64) NOT NULL DEFAULT '',
|
|
client_context JSON,
|
|
idempotency_key VARCHAR(128) NOT NULL,
|
|
status VARCHAR(32) NOT NULL DEFAULT 'received',
|
|
estimated_review_hour INT NOT NULL DEFAULT 24,
|
|
submitted_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
|
PRIMARY KEY(id),
|
|
UNIQUE INDEX uk_im_tenant_applications_app(application_id),
|
|
UNIQUE INDEX uk_im_tenant_applications_idempotency(idempotency_key),
|
|
INDEX idx_im_tenant_applications_credit(credit_code),
|
|
INDEX idx_im_tenant_applications_status(status, id)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci`,
|
|
`CREATE TABLE IF NOT EXISTS im_tenant_entry_feedbacks(
|
|
id BIGINT NOT NULL AUTO_INCREMENT,
|
|
feedback_id VARCHAR(64) NOT NULL,
|
|
description TEXT NOT NULL,
|
|
contact VARCHAR(255) NOT NULL DEFAULT '',
|
|
tenant_code_hint VARCHAR(64) NOT NULL DEFAULT '',
|
|
screenshot_file_ids JSON,
|
|
client_context JSON,
|
|
idempotency_key VARCHAR(128) NOT NULL,
|
|
status VARCHAR(32) NOT NULL DEFAULT 'received',
|
|
submitted_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
|
PRIMARY KEY(id),
|
|
UNIQUE INDEX uk_im_tenant_entry_feedbacks_feedback(feedback_id),
|
|
UNIQUE INDEX uk_im_tenant_entry_feedbacks_idempotency(idempotency_key),
|
|
INDEX idx_im_tenant_entry_feedbacks_status(status, id),
|
|
INDEX idx_im_tenant_entry_feedbacks_hint(tenant_code_hint, id)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci`,
|
|
}
|
|
for _, stmt := range statements {
|
|
if _, err := db.Exec(stmt); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|