Merge pull request #82 from dikstub-rssa/migration

Migration - added intern
This commit is contained in:
Munawwirul Jamal
2025-10-19 08:12:34 +07:00
committed by GitHub
9 changed files with 164 additions and 41 deletions
@@ -0,0 +1,4 @@
-- Modify "Employee" table
ALTER TABLE "public"."Employee" ADD COLUMN "Position_Code" character varying(20) NULL;
-- Rename a column from "Position_Code" to "ContractPosition_Code"
ALTER TABLE "public"."User" RENAME COLUMN "Position_Code" TO "ContractPosition_Code";
@@ -0,0 +1,13 @@
-- Create "Intern" table
CREATE TABLE "public"."Intern" (
"Id" bigserial NOT NULL,
"CreatedAt" timestamptz NULL,
"UpdatedAt" timestamptz NULL,
"DeletedAt" timestamptz NULL,
"Person_Id" bigint NULL,
"Position_Code" character varying(20) NULL,
"User_Id" bigint NULL,
PRIMARY KEY ("Id"),
CONSTRAINT "fk_Intern_Person" FOREIGN KEY ("Person_Id") REFERENCES "public"."Person" ("Id") ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT "fk_Intern_User" FOREIGN KEY ("User_Id") REFERENCES "public"."User" ("Id") ON UPDATE NO ACTION ON DELETE NO ACTION
);
+4 -2
View File
@@ -1,4 +1,4 @@
h1:/NZRnBd4SNPxw+Sv7Fhn/VBxN0wRNU4OldkTUn6GtbI=
h1:S3ggQSrIa2Lwhkx+yWmD9N2hZxRuVwCMZcEpsk83PJY=
20250904105930.sql h1:MEM6blCgke9DzWQSTnLzasbPIrcHssNNrJqZpSkEo6k=
20250904141448.sql h1:J8cmYNk4ZrG9fhfbi2Z1IWz7YkfvhFqTzrLFo58BPY0=
20250908062237.sql h1:Pu23yEW/aKkwozHoOuROvHS/GK4ngARJGdO7FB7HZuI=
@@ -48,4 +48,6 @@ h1:/NZRnBd4SNPxw+Sv7Fhn/VBxN0wRNU4OldkTUn6GtbI=
20251016011023.sql h1:9JB9eFZKURK5RoCVDKR6glSvdJ8NTXrN7K/4q51zkz4=
20251016062912.sql h1:ACNn0fe+EMqUt3hoY+Dr3uqAV/QICBa1+mIW7fUc9Fk=
20251017060617.sql h1:4T3t9ifWrEQTPMSM0XJ98pF7Qdt+UfgtMui17bhrnWI=
20251017082207.sql h1:M3k5WPGt8gxv/4kB71di+78L/FyXrxhgGtXxGedwEps=
20251017082207.sql h1:8vLG1l/saRRMHXkyA4nelJyjaSddhZd6r7R+Uo4JS/c=
20251018032635.sql h1:UltiY1Jm1KjAyBx/oRbhKzwEl3Aqh3o+eaOIfWdroJ8=
20251018040322.sql h1:24VgOPgO2pxfwTcAv7xCv8BHiRPqmIbHUCXNLyvrGfc=
@@ -6,16 +6,18 @@ import (
ep "simrs-vx/internal/domain/main-entities/person"
eu "simrs-vx/internal/domain/main-entities/user"
erc "simrs-vx/internal/domain/references/common"
erg "simrs-vx/internal/domain/references/organization"
)
type Employee struct {
ecore.Main // adjust this according to the needs
User_Id *uint `json:"user_id"`
User *eu.User `json:"user,omitempty" gorm:"foreignKey:User_Id;references:Id"`
Person_Id *uint `json:"person_id"`
Person *ep.Person `json:"person,omitempty" gorm:"foreignKey:Person_Id;references:Id"`
Division_Code *string `json:"division_code"`
Division *ed.Division `json:"division,omitempty" gorm:"foreignKey:Division_Code;references:Code"`
Number *string `json:"number" gorm:"size:20"`
Status_Code erc.ActiveStatusCode `json:"status_code" gorm:"not null;size:10"`
ecore.Main // adjust this according to the needs
User_Id *uint `json:"user_id"`
User *eu.User `json:"user,omitempty" gorm:"foreignKey:User_Id;references:Id"`
Person_Id *uint `json:"person_id"`
Person *ep.Person `json:"person,omitempty" gorm:"foreignKey:Person_Id;references:Id"`
Position_Code *erg.EmployeePosisitionCode `json:"position_code" gorm:"size:20"`
Division_Code *string `json:"division_code"`
Division *ed.Division `json:"division,omitempty" gorm:"foreignKey:Division_Code;references:Code"`
Number *string `json:"number" gorm:"size:20"`
Status_Code erc.ActiveStatusCode `json:"status_code" gorm:"not null;size:10"`
}
@@ -0,0 +1,81 @@
package intern
import (
ecore "simrs-vx/internal/domain/base-entities/core"
ep "simrs-vx/internal/domain/main-entities/person"
es "simrs-vx/internal/domain/main-entities/specialist"
ess "simrs-vx/internal/domain/main-entities/subspecialist"
eu "simrs-vx/internal/domain/main-entities/user"
)
type CreateDto struct {
Person_Id *uint `json:"person_id"`
Specialist_Id *uint16 `json:"specialist_id"`
Subspecialist_Id *uint16 `json:"subspecialist_id"`
User_Id *uint `json:"user_id"`
}
type ReadListDto struct {
FilterDto
Includes string `json:"includes"`
Preloads []string `json:"-"`
Pagination ecore.Pagination
}
type FilterDto struct {
Person_Id *uint `json:"person_id"`
Specialist_Id *uint16 `json:"specialist_id"`
Subspecialist_Id *uint16 `json:"subspecialist_id"`
User_Id *uint `json:"user_id"`
}
type ReadDetailDto struct {
Id uint16 `json:"id"`
User_Id *uint `json:"user_id"`
}
type UpdateDto struct {
Id uint `json:"id"`
CreateDto
}
type DeleteDto struct {
Id uint `json:"id"`
}
type MetaDto struct {
PageNumber int `json:"page_number"`
PageSize int `json:"page_size"`
Count int `json:"count"`
}
type ResponseDto struct {
ecore.Main
Person_Id *uint `json:"person_id"`
Person *ep.Person `json:"person,omitempty"`
Specialist_Id *uint16 `json:"specialist_id"`
Specialist *es.Specialist `json:"specialist,omitempty"`
Subspecialist_Id *uint16 `json:"subspecialist_id"`
Subspecialist *ess.Subspecialist `json:"subspecialist,omitempty"`
User_Id *uint `json:"user_id"`
User *eu.User `json:"user,omitempty"`
}
func (d Intern) ToResponse() ResponseDto {
resp := ResponseDto{
Person_Id: d.Person_Id,
Person: d.Person,
User_Id: d.User_Id,
User: d.User,
}
resp.Main = d.Main
return resp
}
func ToResponseList(data []Intern) []ResponseDto {
resp := make([]ResponseDto, len(data))
for i, u := range data {
resp[i] = u.ToResponse()
}
return resp
}
@@ -0,0 +1,17 @@
package intern
import (
ecore "simrs-vx/internal/domain/base-entities/core"
ep "simrs-vx/internal/domain/main-entities/person"
eu "simrs-vx/internal/domain/main-entities/user"
erg "simrs-vx/internal/domain/references/organization"
)
type Intern struct {
ecore.Main // adjust this according to the needs
Person_Id *uint `json:"person_id"`
Person *ep.Person `json:"person,omitempty" gorm:"foreignKey:Person_Id"`
Position_Code *erg.InternPosisitionCode `json:"position_code" gorm:"size:20"`
User_Id *uint `json:"user_id"`
User *eu.User `json:"user,omitempty" gorm:"foreignKey:User_Id"`
}
+22 -21
View File
@@ -13,21 +13,21 @@ import (
)
type CreateDto struct {
Name string `json:"name" validate:"maxLength=25"`
Password string `json:"password" validate:"maxLength=255"`
Status_Code erc.UserStatusCode `json:"status_code" validate:"maxLength=10"`
Position_Code ero.UserPosisitionCode `json:"position_code" validate:"maxLength=20"`
Person_Id *uint `json:"-"`
Person *ep.UpdateDto `json:"person"`
PersonAddresses []epa.UpdateDto `json:"personAddresses"`
PersonContacts []epc.UpdateDto `json:"personContacts"`
Employee *EmployeUpdateDto `json:"employee"`
IHS_Number *string `json:"ihs_number" validate:"maxLength=20"`
SIP_Number *string `json:"sip_number" validate:"maxLength=20"`
Unit_Id *uint16 `json:"unit_id"`
Infra_Id *uint16 `json:"infra_id"`
Specialist_Id *uint16 `json:"specialist_id"`
Subspecialist_Id *uint16 `json:"subspecialist_id"`
Name string `json:"name" validate:"maxLength=25"`
Password string `json:"password" validate:"maxLength=255"`
Status_Code erc.UserStatusCode `json:"status_code" validate:"maxLength=10"`
ContractPosition_Code ero.ContractPositionCode `json:"contractPosition_code" validate:"maxLength=20"`
Person_Id *uint `json:"-"`
Person *ep.UpdateDto `json:"person"`
PersonAddresses []epa.UpdateDto `json:"personAddresses"`
PersonContacts []epc.UpdateDto `json:"personContacts"`
Employee *EmployeUpdateDto `json:"employee"`
IHS_Number *string `json:"ihs_number" validate:"maxLength=20"`
SIP_Number *string `json:"sip_number" validate:"maxLength=20"`
Unit_Id *uint16 `json:"unit_id"`
Infra_Id *uint16 `json:"infra_id"`
Specialist_Id *uint16 `json:"specialist_id"`
Subspecialist_Id *uint16 `json:"subspecialist_id"`
}
type ReadListDto struct {
@@ -84,12 +84,13 @@ func (d *User) ToResponse() ResponseDto {
}
type EmployeUpdateDto struct {
Id uint `json:"id"`
User_Id *uint `json:"-"`
Person_Id *uint `json:"-"`
Division_Code *string `json:"division_code"`
Number *string `json:"number" validate:"maxLength=20"`
Status_Code erc.ActiveStatusCode `json:"status_code" validate:"maxLength=10"`
Id uint `json:"id"`
User_Id *uint `json:"-"`
Person_Id *uint `json:"-"`
Division_Code *string `json:"division_code"`
Number *string `json:"number" validate:"maxLength=20"`
Position_Code ero.EmployeePosisitionCode `json:"status_code" validate:"maxLength=10"`
Status_Code erc.ActiveStatusCode `json:"status_code" validate:"maxLength=10"`
}
func ToResponseList(data []User) []ResponseDto {
+10 -9
View File
@@ -9,13 +9,14 @@ import (
)
type User struct {
ecore.Main // adjust this according to the needs
Name string `json:"name" gorm:"unique;not null;size:25"`
Password string `json:"password" gorm:"not null;size:255"`
Status_Code erc.UserStatusCode `json:"status_code" gorm:"not null;size:10"`
FailedLoginCount uint8 `json:"failedLoginCount" gorm:"type:smallint"`
Position_Code ero.UserPosisitionCode `json:"position_code" gorm:"not null;size:20"`
LoginAttemptCount int `json:"-"`
LastSuccessLogin *time.Time `json:"lastSuccessLogin,omitempty"`
LastAllowdLogin *time.Time `json:"lastAllowdLogin,omitempty"`
ecore.Main // adjust this according to the needs
Name string `json:"name" gorm:"unique;not null;size:25"`
Password string `json:"password" gorm:"not null;size:255"`
Status_Code erc.UserStatusCode `json:"status_code" gorm:"not null;size:10"`
FailedLoginCount uint8 `json:"failedLoginCount" gorm:"type:smallint"`
// Position_Code ero.EmployeePosisitionCode `json:"position_code" gorm:"not null;size:20"`
ContractPosition_Code ero.ContractPositionCode `json:"contractPosition_Code" gorm:"not null;size:20"`
LoginAttemptCount int `json:"-"`
LastSuccessLogin *time.Time `json:"lastSuccessLogin,omitempty"`
LastAllowdLogin *time.Time `json:"lastAllowdLogin,omitempty"`
}
@@ -25,6 +25,7 @@ import (
inpatient "simrs-vx/internal/domain/main-entities/inpatient"
installation "simrs-vx/internal/domain/main-entities/installation"
insurancecompany "simrs-vx/internal/domain/main-entities/insurance-company"
intern "simrs-vx/internal/domain/main-entities/intern"
internalreference "simrs-vx/internal/domain/main-entities/internal-reference"
item "simrs-vx/internal/domain/main-entities/item"
itemprice "simrs-vx/internal/domain/main-entities/item-price"
@@ -105,6 +106,7 @@ func getMainEntities() []any {
&diagnosesrc.DiagnoseSrc{},
&proceduresrc.ProcedureSrc{},
&employee.Employee{},
&intern.Intern{},
&doctor.Doctor{},
&nurse.Nurse{},
&nutritionist.Nutritionist{},