fix: ensure attendance schema for tenant routing
This commit is contained in:
@@ -278,6 +278,9 @@ func (a *adapter) Open(jsonconfig json.RawMessage) error {
|
|||||||
if err = ensureIMOrganizationVisibilityTables(a.db); err != nil {
|
if err = ensureIMOrganizationVisibilityTables(a.db); err != nil {
|
||||||
return errors.New("mysql adapter failed to ensure organization visibility schema: " + err.Error())
|
return errors.New("mysql adapter failed to ensure organization visibility schema: " + err.Error())
|
||||||
}
|
}
|
||||||
|
if err = ensureIMAttendanceTables(a.db); err != nil {
|
||||||
|
return errors.New("mysql adapter failed to ensure attendance schema: " + err.Error())
|
||||||
|
}
|
||||||
if err = ensureSnowflakePrimaryKeys(a.db); err != nil {
|
if err = ensureSnowflakePrimaryKeys(a.db); err != nil {
|
||||||
return errors.New("mysql adapter failed to ensure snowflake primary keys: " + err.Error())
|
return errors.New("mysql adapter failed to ensure snowflake primary keys: " + err.Error())
|
||||||
}
|
}
|
||||||
@@ -514,6 +517,10 @@ func (a *adapter) TenantAdapterFor(tenantID t.TenantID) (dbadapter.TenantBusines
|
|||||||
db.Close()
|
db.Close()
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
|
if err = ensureIMAttendanceTables(db); err != nil {
|
||||||
|
db.Close()
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
if err = ensureSnowflakePrimaryKeys(db); err != nil {
|
if err = ensureSnowflakePrimaryKeys(db); err != nil {
|
||||||
db.Close()
|
db.Close()
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
@@ -1236,6 +1243,32 @@ func ensureIMOrganizationVisibilityTables(exec sqlExecutor) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func createIMAttendanceTables(tx *sql.Tx) error {
|
func createIMAttendanceTables(tx *sql.Tx) error {
|
||||||
|
for _, stmt := range imAttendanceTableStatements(false) {
|
||||||
|
if _, err := tx.Exec(stmt); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return seedIMAttendanceDefaults(tx)
|
||||||
|
}
|
||||||
|
|
||||||
|
func ensureIMAttendanceTables(db *sqlx.DB) error {
|
||||||
|
tx, err := db.Begin()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer tx.Rollback()
|
||||||
|
for _, stmt := range imAttendanceTableStatements(true) {
|
||||||
|
if _, err = tx.Exec(stmt); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if err = seedIMAttendanceDefaults(tx); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return tx.Commit()
|
||||||
|
}
|
||||||
|
|
||||||
|
func imAttendanceTableStatements(ifNotExists bool) []string {
|
||||||
statements := []string{
|
statements := []string{
|
||||||
`CREATE TABLE im_attendance_rules(
|
`CREATE TABLE im_attendance_rules(
|
||||||
id BIGINT NOT NULL AUTO_INCREMENT,
|
id BIGINT NOT NULL AUTO_INCREMENT,
|
||||||
@@ -1336,11 +1369,15 @@ func createIMAttendanceTables(tx *sql.Tx) error {
|
|||||||
INDEX idx_im_attendance_appeals_user_status(user_id,status,id DESC)
|
INDEX idx_im_attendance_appeals_user_status(user_id,status,id DESC)
|
||||||
)`,
|
)`,
|
||||||
}
|
}
|
||||||
for _, stmt := range statements {
|
if ifNotExists {
|
||||||
if _, err := tx.Exec(stmt); err != nil {
|
for i, stmt := range statements {
|
||||||
return err
|
statements[i] = strings.Replace(stmt, "CREATE TABLE ", "CREATE TABLE IF NOT EXISTS ", 1)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return statements
|
||||||
|
}
|
||||||
|
|
||||||
|
func seedIMAttendanceDefaults(tx *sql.Tx) error {
|
||||||
if _, err := tx.Exec(`INSERT INTO im_attendance_rules(rule_id,name,workday,location_required,wifi_required,allow_outside_checkin,appeal_allowed)
|
if _, err := tx.Exec(`INSERT INTO im_attendance_rules(rule_id,name,workday,location_required,wifi_required,allow_outside_checkin,appeal_allowed)
|
||||||
VALUES('att_rule_default','默认考勤规则',1,0,0,1,1)
|
VALUES('att_rule_default','默认考勤规则',1,0,0,1,1)
|
||||||
ON DUPLICATE KEY UPDATE updated_at=updated_at`); err != nil {
|
ON DUPLICATE KEY UPDATE updated_at=updated_at`); err != nil {
|
||||||
|
|||||||
Reference in New Issue
Block a user