{
    "version": 1,
    "tables": [
        {
            "id": "tbl_as_users",
            "name": "users",
            "color": "#8A8798",
            "x": 120,
            "y": 120,
            "timestamps": true,
            "soft_deletes": true,
            "external": true,
            "columns": [
                {
                    "id": "as_u1",
                    "name": "id",
                    "type": "id",
                    "nullable": false,
                    "unique": false,
                    "primary": true,
                    "index": false,
                    "unsigned": false,
                    "default": null,
                    "length": null,
                    "precision": null,
                    "scale": null,
                    "values": null,
                    "comment": null,
                    "foreign": null
                },
                {
                    "id": "as_u2",
                    "name": "email",
                    "type": "string",
                    "nullable": false,
                    "unique": true,
                    "primary": false,
                    "index": false,
                    "unsigned": false,
                    "default": null,
                    "length": 255,
                    "precision": null,
                    "scale": null,
                    "values": null,
                    "comment": "تغيير الإيميل يحدّثه بعد verify-new",
                    "foreign": null
                },
                {
                    "id": "as_u3",
                    "name": "phone",
                    "type": "string",
                    "nullable": false,
                    "unique": true,
                    "primary": false,
                    "index": false,
                    "unsigned": false,
                    "default": null,
                    "length": 255,
                    "precision": null,
                    "scale": null,
                    "values": null,
                    "comment": "تغيير الهاتف يحدّثه بعد verify-new",
                    "foreign": null
                },
                {
                    "id": "as_u4",
                    "name": "phone_normalized",
                    "type": "string",
                    "nullable": true,
                    "unique": true,
                    "primary": false,
                    "index": false,
                    "unsigned": false,
                    "default": null,
                    "length": 255,
                    "precision": null,
                    "scale": null,
                    "values": null,
                    "comment": null,
                    "foreign": null
                },
                {
                    "id": "as_u5",
                    "name": "country_code",
                    "type": "string",
                    "nullable": true,
                    "unique": false,
                    "primary": false,
                    "index": false,
                    "unsigned": false,
                    "default": null,
                    "length": 5,
                    "precision": null,
                    "scale": null,
                    "values": null,
                    "comment": null,
                    "foreign": null
                },
                {
                    "id": "as_u6",
                    "name": "password",
                    "type": "string",
                    "nullable": true,
                    "unique": false,
                    "primary": false,
                    "index": false,
                    "unsigned": false,
                    "default": null,
                    "length": 255,
                    "precision": null,
                    "scale": null,
                    "values": null,
                    "comment": "change-password يحدّثه (hashed)",
                    "foreign": null
                },
                {
                    "id": "as_u7",
                    "name": "email_verified_at",
                    "type": "timestamp",
                    "nullable": true,
                    "unique": false,
                    "primary": false,
                    "index": false,
                    "unsigned": false,
                    "default": null,
                    "length": null,
                    "precision": null,
                    "scale": null,
                    "values": null,
                    "comment": null,
                    "foreign": null
                },
                {
                    "id": "as_u8",
                    "name": "phone_verified_at",
                    "type": "timestamp",
                    "nullable": true,
                    "unique": false,
                    "primary": false,
                    "index": false,
                    "unsigned": false,
                    "default": null,
                    "length": null,
                    "precision": null,
                    "scale": null,
                    "values": null,
                    "comment": null,
                    "foreign": null
                }
            ]
        },
        {
            "id": "tbl_as_otps",
            "name": "otps",
            "color": "#8A8798",
            "x": 560,
            "y": 120,
            "timestamps": true,
            "soft_deletes": false,
            "external": true,
            "columns": [
                {
                    "id": "as_o1",
                    "name": "id",
                    "type": "id",
                    "nullable": false,
                    "unique": false,
                    "primary": true,
                    "index": false,
                    "unsigned": false,
                    "default": null,
                    "length": null,
                    "precision": null,
                    "scale": null,
                    "values": null,
                    "comment": null,
                    "foreign": null
                },
                {
                    "id": "as_o2",
                    "name": "otpable_type",
                    "type": "string",
                    "nullable": false,
                    "unique": false,
                    "primary": false,
                    "index": true,
                    "unsigned": false,
                    "default": null,
                    "length": 255,
                    "precision": null,
                    "scale": null,
                    "values": null,
                    "comment": "morph → User",
                    "foreign": null
                },
                {
                    "id": "as_o3",
                    "name": "otpable_id",
                    "type": "bigInteger",
                    "nullable": false,
                    "unique": false,
                    "primary": false,
                    "index": true,
                    "unsigned": true,
                    "default": null,
                    "length": null,
                    "precision": null,
                    "scale": null,
                    "values": null,
                    "comment": null,
                    "foreign": null
                },
                {
                    "id": "as_o4",
                    "name": "changed_value",
                    "type": "string",
                    "nullable": true,
                    "unique": false,
                    "primary": false,
                    "index": false,
                    "unsigned": false,
                    "default": null,
                    "length": 255,
                    "precision": null,
                    "scale": null,
                    "values": null,
                    "comment": "الهاتف/الإيميل الجديد لحد التأكيد",
                    "foreign": null
                },
                {
                    "id": "as_o5",
                    "name": "country_code",
                    "type": "string",
                    "nullable": true,
                    "unique": false,
                    "primary": false,
                    "index": false,
                    "unsigned": false,
                    "default": null,
                    "length": 255,
                    "precision": null,
                    "scale": null,
                    "values": null,
                    "comment": "كود الدولة للهاتف الجديد",
                    "foreign": null
                },
                {
                    "id": "as_o6",
                    "name": "verification_code",
                    "type": "string",
                    "nullable": true,
                    "unique": false,
                    "primary": false,
                    "index": false,
                    "unsigned": false,
                    "default": null,
                    "length": 255,
                    "precision": null,
                    "scale": null,
                    "values": null,
                    "comment": null,
                    "foreign": null
                },
                {
                    "id": "as_o7",
                    "name": "verification_code_expire_at",
                    "type": "timestamp",
                    "nullable": true,
                    "unique": false,
                    "primary": false,
                    "index": false,
                    "unsigned": false,
                    "default": null,
                    "length": null,
                    "precision": null,
                    "scale": null,
                    "values": null,
                    "comment": null,
                    "foreign": null
                },
                {
                    "id": "as_o8",
                    "name": "type",
                    "type": "string",
                    "nullable": true,
                    "unique": false,
                    "primary": false,
                    "index": true,
                    "unsigned": false,
                    "default": null,
                    "length": 255,
                    "precision": null,
                    "scale": null,
                    "values": null,
                    "comment": "OtpType: OLD_PHONE_VERIFY/NEW_PHONE_VERIFY/OLD_EMAIL_VERIFY/NEW_EMAIL_VERIFY/CHANGE_PASSWORD",
                    "foreign": null
                },
                {
                    "id": "as_o9",
                    "name": "status",
                    "type": "string",
                    "nullable": false,
                    "unique": false,
                    "primary": false,
                    "index": true,
                    "unsigned": false,
                    "default": null,
                    "length": 255,
                    "precision": null,
                    "scale": null,
                    "values": null,
                    "comment": "OtpStatus: ACTIVE/FINISHED/FAILED",
                    "foreign": null
                },
                {
                    "id": "as_o10",
                    "name": "tries",
                    "type": "tinyInteger",
                    "nullable": false,
                    "unique": false,
                    "primary": false,
                    "index": false,
                    "unsigned": true,
                    "default": null,
                    "length": null,
                    "precision": null,
                    "scale": null,
                    "values": null,
                    "comment": null,
                    "foreign": null
                }
            ]
        }
    ],
    "relations": [],
    "meta": {
        "name": "أمان الحساب",
        "feature": "account_security",
        "note": "تغيير كلمة المرور/الهاتف/الإيميل — REUSE بالكامل: users + otps (مفيش أعمدة/جداول جديدة). القيمة الجديدة تُخزَّن في otps.changed_value + otps.country_code لحد التأكيد."
    },
    "updated_at": "2026-07-08T23:20:46+00:00"
}