feat: add doctor and specialty management modules with full CRUD support and database seeding

This commit is contained in:
2026-07-18 22:29:28 +07:00
parent a85fc6e73f
commit fdbbb7c965
196 changed files with 3955 additions and 3 deletions
@@ -6,6 +6,7 @@
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.20.xsd">
<changeSet id="20260714080000-1" author="antigravity">
<validCheckSum>ANY</validCheckSum>
<preConditions onFail="MARK_RAN">
<sqlCheck expectedResult="0">SELECT COUNT(*) FROM sis_component_template WHERE slug = 'news-grid'</sqlCheck>
</preConditions>
@@ -0,0 +1,55 @@
<?xml version="1.0" encoding="utf-8"?>
<databaseChangeLog
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-latest.xsd">
<changeSet id="20260718100000-1" author="antigravity">
<createTable tableName="sis_specialty">
<column name="id" type="bigint">
<constraints primaryKey="true" nullable="false"/>
</column>
<column name="name" type="varchar(255)">
<constraints nullable="false"/>
</column>
<column name="slug" type="varchar(255)">
<constraints nullable="false" unique="true"/>
</column>
<column name="icon_url" type="varchar(500)"/>
<column name="created_by" type="varchar(50)">
<constraints nullable="false"/>
</column>
<column name="created_date" type="timestamp"/>
<column name="last_modified_by" type="varchar(50)"/>
<column name="last_modified_date" type="timestamp"/>
</createTable>
<createTable tableName="sis_doctor">
<column name="id" type="bigint">
<constraints primaryKey="true" nullable="false"/>
</column>
<column name="name" type="varchar(255)">
<constraints nullable="false"/>
</column>
<column name="title" type="varchar(100)"/>
<column name="specialty_id" type="bigint">
<constraints nullable="true"/>
</column>
<column name="avatar_url" type="varchar(500)"/>
<column name="booking_url" type="varchar(500)"/>
<column name="created_by" type="varchar(50)">
<constraints nullable="false"/>
</column>
<column name="created_date" type="timestamp"/>
<column name="last_modified_by" type="varchar(50)"/>
<column name="last_modified_date" type="timestamp"/>
</createTable>
<addForeignKeyConstraint baseColumnNames="specialty_id"
baseTableName="sis_doctor"
constraintName="fk_doctor_specialty_id"
referencedColumnNames="id"
referencedTableName="sis_specialty"/>
</changeSet>
</databaseChangeLog>
@@ -0,0 +1,241 @@
<?xml version="1.0" encoding="utf-8"?>
<databaseChangeLog
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-latest.xsd">
<changeSet id="20260718110000-1" author="antigravity" context="dev, faker">
<insert tableName="sis_specialty">
<column name="id" value="1"/>
<column name="name" value="Khoa Tim mạch"/>
<column name="slug" value="khoa-tim-mach"/>
<column name="icon_url" value="https://cdn-icons-png.flaticon.com/512/883/883360.png"/>
<column name="created_by" value="system"/>
<column name="created_date" valueDate="2026-07-18T00:00:00"/>
</insert>
<insert tableName="sis_specialty">
<column name="id" value="2"/>
<column name="name" value="Khoa Thần kinh"/>
<column name="slug" value="khoa-than-kinh"/>
<column name="icon_url" value="https://cdn-icons-png.flaticon.com/512/2093/2093153.png"/>
<column name="created_by" value="system"/>
<column name="created_date" valueDate="2026-07-18T00:00:00"/>
</insert>
<insert tableName="sis_specialty">
<column name="id" value="3"/>
<column name="name" value="Khoa Tiêu hóa"/>
<column name="slug" value="khoa-tieu-hoa"/>
<column name="icon_url" value="https://cdn-icons-png.flaticon.com/512/3063/3063200.png"/>
<column name="created_by" value="system"/>
<column name="created_date" valueDate="2026-07-18T00:00:00"/>
</insert>
<insert tableName="sis_specialty">
<column name="id" value="4"/>
<column name="name" value="Khoa Nhi"/>
<column name="slug" value="khoa-nhi"/>
<column name="icon_url" value="https://cdn-icons-png.flaticon.com/512/2966/2966327.png"/>
<column name="created_by" value="system"/>
<column name="created_date" valueDate="2026-07-18T00:00:00"/>
</insert>
<insert tableName="sis_doctor">
<column name="id" value="1"/>
<column name="name" value="Ngô Tùng T"/>
<column name="title" value="ThS. BS."/>
<column name="specialty_id" value="2"/>
<column name="avatar_url" value="https://i.pravatar.cc/300?img=11"/>
<column name="booking_url" value="https://booking.bvdaihoc.com.vn/"/>
<column name="created_by" value="system"/>
<column name="created_date" valueDate="2026-07-18T00:00:00"/>
</insert>
<insert tableName="sis_doctor">
<column name="id" value="2"/>
<column name="name" value="Ngô Anh L"/>
<column name="title" value="TS. BS."/>
<column name="specialty_id" value="1"/>
<column name="avatar_url" value="https://i.pravatar.cc/300?img=12"/>
<column name="booking_url" value="https://booking.bvdaihoc.com.vn/"/>
<column name="created_by" value="system"/>
<column name="created_date" valueDate="2026-07-18T00:00:00"/>
</insert>
<insert tableName="sis_doctor">
<column name="id" value="3"/>
<column name="name" value="Huỳnh Thị B"/>
<column name="title" value="TS. BS."/>
<column name="specialty_id" value="4"/>
<column name="avatar_url" value="https://i.pravatar.cc/300?img=13"/>
<column name="booking_url" value="https://booking.bvdaihoc.com.vn/"/>
<column name="created_by" value="system"/>
<column name="created_date" valueDate="2026-07-18T00:00:00"/>
</insert>
<insert tableName="sis_doctor">
<column name="id" value="4"/>
<column name="name" value="Hoàng Thị B"/>
<column name="title" value="ThS. BS."/>
<column name="specialty_id" value="2"/>
<column name="avatar_url" value="https://i.pravatar.cc/300?img=14"/>
<column name="booking_url" value="https://booking.bvdaihoc.com.vn/"/>
<column name="created_by" value="system"/>
<column name="created_date" valueDate="2026-07-18T00:00:00"/>
</insert>
<insert tableName="sis_doctor">
<column name="id" value="5"/>
<column name="name" value="Lê Anh L"/>
<column name="title" value="PGS. TS. BS."/>
<column name="specialty_id" value="1"/>
<column name="avatar_url" value="https://i.pravatar.cc/300?img=15"/>
<column name="booking_url" value="https://booking.bvdaihoc.com.vn/"/>
<column name="created_by" value="system"/>
<column name="created_date" valueDate="2026-07-18T00:00:00"/>
</insert>
<insert tableName="sis_doctor">
<column name="id" value="6"/>
<column name="name" value="Võ Thị B"/>
<column name="title" value="PGS. TS. BS."/>
<column name="specialty_id" value="3"/>
<column name="avatar_url" value="https://i.pravatar.cc/300?img=16"/>
<column name="booking_url" value="https://booking.bvdaihoc.com.vn/"/>
<column name="created_by" value="system"/>
<column name="created_date" valueDate="2026-07-18T00:00:00"/>
</insert>
<insert tableName="sis_doctor">
<column name="id" value="7"/>
<column name="name" value="Lê Ngọc I"/>
<column name="title" value="BS. CKII."/>
<column name="specialty_id" value="1"/>
<column name="avatar_url" value="https://i.pravatar.cc/300?img=17"/>
<column name="booking_url" value="https://booking.bvdaihoc.com.vn/"/>
<column name="created_by" value="system"/>
<column name="created_date" valueDate="2026-07-18T00:00:00"/>
</insert>
<insert tableName="sis_doctor">
<column name="id" value="8"/>
<column name="name" value="Trần Anh L"/>
<column name="title" value="BS. CKI."/>
<column name="specialty_id" value="2"/>
<column name="avatar_url" value="https://i.pravatar.cc/300?img=18"/>
<column name="booking_url" value="https://booking.bvdaihoc.com.vn/"/>
<column name="created_by" value="system"/>
<column name="created_date" valueDate="2026-07-18T00:00:00"/>
</insert>
<insert tableName="sis_doctor">
<column name="id" value="9"/>
<column name="name" value="Dương Sơn S"/>
<column name="title" value="BS. CKI."/>
<column name="specialty_id" value="3"/>
<column name="avatar_url" value="https://i.pravatar.cc/300?img=19"/>
<column name="booking_url" value="https://booking.bvdaihoc.com.vn/"/>
<column name="created_by" value="system"/>
<column name="created_date" valueDate="2026-07-18T00:00:00"/>
</insert>
<insert tableName="sis_doctor">
<column name="id" value="10"/>
<column name="name" value="Võ Minh D"/>
<column name="title" value="ThS. BS."/>
<column name="specialty_id" value="3"/>
<column name="avatar_url" value="https://i.pravatar.cc/300?img=20"/>
<column name="booking_url" value="https://booking.bvdaihoc.com.vn/"/>
<column name="created_by" value="system"/>
<column name="created_date" valueDate="2026-07-18T00:00:00"/>
</insert>
<insert tableName="sis_doctor">
<column name="id" value="11"/>
<column name="name" value="Ngô Tuấn M"/>
<column name="title" value="BS. CKI."/>
<column name="specialty_id" value="4"/>
<column name="avatar_url" value="https://i.pravatar.cc/300?img=21"/>
<column name="booking_url" value="https://booking.bvdaihoc.com.vn/"/>
<column name="created_by" value="system"/>
<column name="created_date" valueDate="2026-07-18T00:00:00"/>
</insert>
<insert tableName="sis_doctor">
<column name="id" value="12"/>
<column name="name" value="Hoàng Văn A"/>
<column name="title" value="ThS. BS."/>
<column name="specialty_id" value="2"/>
<column name="avatar_url" value="https://i.pravatar.cc/300?img=22"/>
<column name="booking_url" value="https://booking.bvdaihoc.com.vn/"/>
<column name="created_by" value="system"/>
<column name="created_date" valueDate="2026-07-18T00:00:00"/>
</insert>
<insert tableName="sis_doctor">
<column name="id" value="13"/>
<column name="name" value="Hồ Minh D"/>
<column name="title" value="BS. CKII."/>
<column name="specialty_id" value="3"/>
<column name="avatar_url" value="https://i.pravatar.cc/300?img=23"/>
<column name="booking_url" value="https://booking.bvdaihoc.com.vn/"/>
<column name="created_by" value="system"/>
<column name="created_date" valueDate="2026-07-18T00:00:00"/>
</insert>
<insert tableName="sis_doctor">
<column name="id" value="14"/>
<column name="name" value="Trần Tuấn M"/>
<column name="title" value="ThS. BS."/>
<column name="specialty_id" value="2"/>
<column name="avatar_url" value="https://i.pravatar.cc/300?img=24"/>
<column name="booking_url" value="https://booking.bvdaihoc.com.vn/"/>
<column name="created_by" value="system"/>
<column name="created_date" valueDate="2026-07-18T00:00:00"/>
</insert>
<insert tableName="sis_doctor">
<column name="id" value="15"/>
<column name="name" value="Dương Quốc C"/>
<column name="title" value="BS. CKI."/>
<column name="specialty_id" value="1"/>
<column name="avatar_url" value="https://i.pravatar.cc/300?img=25"/>
<column name="booking_url" value="https://booking.bvdaihoc.com.vn/"/>
<column name="created_by" value="system"/>
<column name="created_date" valueDate="2026-07-18T00:00:00"/>
</insert>
<insert tableName="sis_doctor">
<column name="id" value="16"/>
<column name="name" value="Đỗ Hữu E"/>
<column name="title" value="ThS. BS."/>
<column name="specialty_id" value="3"/>
<column name="avatar_url" value="https://i.pravatar.cc/300?img=26"/>
<column name="booking_url" value="https://booking.bvdaihoc.com.vn/"/>
<column name="created_by" value="system"/>
<column name="created_date" valueDate="2026-07-18T00:00:00"/>
</insert>
<insert tableName="sis_doctor">
<column name="id" value="17"/>
<column name="name" value="Dương Thị B"/>
<column name="title" value="PGS. TS. BS."/>
<column name="specialty_id" value="1"/>
<column name="avatar_url" value="https://i.pravatar.cc/300?img=27"/>
<column name="booking_url" value="https://booking.bvdaihoc.com.vn/"/>
<column name="created_by" value="system"/>
<column name="created_date" valueDate="2026-07-18T00:00:00"/>
</insert>
<insert tableName="sis_doctor">
<column name="id" value="18"/>
<column name="name" value="Ngô Thị B"/>
<column name="title" value="PGS. TS. BS."/>
<column name="specialty_id" value="1"/>
<column name="avatar_url" value="https://i.pravatar.cc/300?img=28"/>
<column name="booking_url" value="https://booking.bvdaihoc.com.vn/"/>
<column name="created_by" value="system"/>
<column name="created_date" valueDate="2026-07-18T00:00:00"/>
</insert>
<insert tableName="sis_doctor">
<column name="id" value="19"/>
<column name="name" value="Ngô Quốc C"/>
<column name="title" value="PGS. TS. BS."/>
<column name="specialty_id" value="1"/>
<column name="avatar_url" value="https://i.pravatar.cc/300?img=29"/>
<column name="booking_url" value="https://booking.bvdaihoc.com.vn/"/>
<column name="created_by" value="system"/>
<column name="created_date" valueDate="2026-07-18T00:00:00"/>
</insert>
<insert tableName="sis_doctor">
<column name="id" value="20"/>
<column name="name" value="Phạm Thu P"/>
<column name="title" value="PGS. TS. BS."/>
<column name="specialty_id" value="2"/>
<column name="avatar_url" value="https://i.pravatar.cc/300?img=30"/>
<column name="booking_url" value="https://booking.bvdaihoc.com.vn/"/>
<column name="created_by" value="system"/>
<column name="created_date" valueDate="2026-07-18T00:00:00"/>
</insert>
</changeSet>
</databaseChangeLog>
@@ -39,4 +39,6 @@
<include file="config/liquibase/changelog/20260714080000_seed_news_events_components.xml" relativeToChangelogFile="false"/>
<include file="config/liquibase/changelog/20260714112000_add_location_to_post.xml" relativeToChangelogFile="false"/>
<include file="config/liquibase/changelog/20260714113000_update_events_list.xml" relativeToChangelogFile="false"/>
<include file="config/liquibase/changelog/20260718100000_add_doctor_and_specialty.xml" relativeToChangelogFile="false"/>
<include file="config/liquibase/changelog/20260718110000_seed_sample_doctors.xml" relativeToChangelogFile="false"/>
</databaseChangeLog>