diff --git a/submit-api/src/submit_api/models/package.py b/submit-api/src/submit_api/models/package.py index 66807a41..184ecbf5 100644 --- a/submit-api/src/submit_api/models/package.py +++ b/submit-api/src/submit_api/models/package.py @@ -36,12 +36,8 @@ class Package(BaseModel): type_id = Column(db.Integer, ForeignKey('package_types.id'), nullable=False) type = db.relationship('PackageType', foreign_keys=[type_id], lazy='joined') submitted_on = Column(db.DateTime, nullable=True) - submitted_by = Column(db.String(255), nullable=True) - submitted_by_user = db.relationship( - 'User', - primaryjoin="foreign(Package.submitted_by) == User.auth_guid", - lazy='joined' - ) + submitted_by = Column(db.String, ForeignKey('users.auth_guid'), nullable=True) + submitted_by_user = db.relationship('User', foreign_keys=[submitted_by], lazy='joined') meta = db.relationship('PackageMetadata', backref='package', lazy='select') items = db.relationship('Item', backref='package', lazy='joined', order_by='Item.sort_order') status = Column(db.ARRAY(Enum(PackageStatus)), nullable=False, default=[PackageStatus.NEW_SUBMISSION.value]) diff --git a/submit-api/src/submit_api/models/submission.py b/submit-api/src/submit_api/models/submission.py index 989e0ba7..5c800e46 100644 --- a/submit-api/src/submit_api/models/submission.py +++ b/submit-api/src/submit_api/models/submission.py @@ -33,11 +33,8 @@ class Submission(BaseModel): submitted_form = db.relationship('SubmittedForm', foreign_keys=[submitted_form_id], lazy='joined') submitted_document = db.relationship('SubmittedDocument', foreign_keys=[submitted_document_id], lazy='joined') version = Column(db.Integer, nullable=False, default=1) - user = db.relationship( - 'User', - primaryjoin="foreign(Submission.created_by) == User.auth_guid", - lazy='joined' - ) + created_by = Column(db.String, ForeignKey('users.auth_guid'), nullable=False) + submitted_by_user = db.relationship('User', foreign_keys=[created_by], lazy='joined') Index('idx_submissions_type_item_id', type, item_id) diff --git a/submit-api/src/submit_api/schemas/item.py b/submit-api/src/submit_api/schemas/item.py index 5162423e..59b83860 100644 --- a/submit-api/src/submit_api/schemas/item.py +++ b/submit-api/src/submit_api/schemas/item.py @@ -3,13 +3,14 @@ Manages the item schema """ -from marshmallow import EXCLUDE, Schema, fields +from marshmallow import EXCLUDE, Schema, fields, pre_dump from submit_api.enums.item_status import ItemStatus from submit_api.models.submission import SubmissionTypeStatus from submit_api.schemas.account_user import AccountUserSchema from submit_api.schemas.item_type import ItemTypeSchema from submit_api.schemas.submission import SubmittedDocumentSchema, SubmittedFormSchema +from submit_api.schemas.user import UserSchema class ItemSubmissionSchema(Schema): @@ -29,9 +30,15 @@ class Meta: # pylint: disable=too-few-public-methods submitted_document = fields.Nested(SubmittedDocumentSchema, data_key="submitted_document") created_date = fields.DateTime(data_key="created_date") created_by = fields.Str(data_key="created_by") - account_user = fields.Nested(AccountUserSchema, data_key="account_user") + submitted_by = fields.Str(data_key="submitted_by") version = fields.Int(data_key="version") + @pre_dump + def get_submitted_by(self, obj, **kwargs): + """Get submitted by.""" + obj.submitted_by = obj.submitted_by_user.account_user.full_name if obj.submitted_by_user else None + return obj + class ItemSchema(Schema): """item schema.""" diff --git a/submit-api/src/submit_api/schemas/package.py b/submit-api/src/submit_api/schemas/package.py index 0bb65900..35ef74ea 100644 --- a/submit-api/src/submit_api/schemas/package.py +++ b/submit-api/src/submit_api/schemas/package.py @@ -3,12 +3,12 @@ Manages the package """ -from marshmallow import EXCLUDE, Schema, fields +from marshmallow import EXCLUDE, Schema, fields, pre_dump from submit_api.models.package import PackageStatus -from submit_api.schemas.account_user import AccountUserSchema from submit_api.schemas.item import ItemSchema from submit_api.schemas.package_type import PackageTypeSchema +from submit_api.schemas.user import UserSchema class PostPackageRequestSchema(Schema): @@ -63,6 +63,11 @@ class Meta: # pylint: disable=too-few-public-methods type_id = fields.Int(data_key="type_id") status = fields.List(fields.Enum(enum=PackageStatus), enum=PackageStatus, data_key="status") submitted_on = fields.DateTime(data_key="submitted_on") - submitted_by_account_user = fields.Pluck(AccountUserSchema, "full_name", data_key="submitted_by") + submitted_by = fields.Str(data_key="submitted_by") meta = fields.Nested(PackageMetadataSchema, data_key="meta", many=True) items = fields.Nested(ItemSchema, data_key="items", many=True) + + @pre_dump + def get_submitted_by(self, obj, **kwargs): + obj.submitted_by = obj.submitted_by_user.account_user.full_name if obj.submitted_by_user and obj.submitted_by_user.account_user else None + return obj diff --git a/submit-api/src/submit_api/schemas/project.py b/submit-api/src/submit_api/schemas/project.py index 2770de73..b8f21a99 100644 --- a/submit-api/src/submit_api/schemas/project.py +++ b/submit-api/src/submit_api/schemas/project.py @@ -3,7 +3,7 @@ Manages the engagement """ -from marshmallow import EXCLUDE, Schema, fields +from marshmallow import EXCLUDE, Schema, fields, pre_dump from submit_api.models.package import PackageStatus from submit_api.schemas.account_user import AccountUserSchema @@ -49,9 +49,14 @@ class Meta: # pylint: disable=too-few-public-methods type = fields.Nested(PackageTypeSchema, data_key="type") status = fields.List(fields.Enum(enum=PackageStatus), data_key="status") submitted_on = fields.DateTime(data_key="submitted_on") - submitted_by_account_user = fields.Pluck(AccountUserSchema, "full_name", data_key="submitted_by") + submitted_by = fields.Str(data_key="submitted_by") items = fields.Function(lambda obj: []) + @pre_dump + def get_submitted_by(self, obj, **kwargs): + obj.submitted_by = obj.submitted_by_user.account_user.full_name if obj.submitted_by_user and obj.submitted_by_user.account_user else None + return obj + class AccountProjectSchema(Schema): """Account project schema.""" diff --git a/submit-api/src/submit_api/schemas/submission.py b/submit-api/src/submit_api/schemas/submission.py index 209de387..eb17c0b5 100644 --- a/submit-api/src/submit_api/schemas/submission.py +++ b/submit-api/src/submit_api/schemas/submission.py @@ -3,7 +3,7 @@ Manages the submission schema """ -from marshmallow import EXCLUDE, Schema, fields +from marshmallow import EXCLUDE, Schema, fields, pre_dump from submit_api.schemas.account_user import AccountUserSchema @@ -54,9 +54,15 @@ class Meta: # pylint: disable=too-few-public-methods submitted_document = fields.Nested(SubmittedDocumentSchema, data_key="submitted_document") created_date = fields.DateTime(data_key="created_date") created_by = fields.Str(data_key="created_by") - account_user = fields.Nested(AccountUserSchema, data_key="account_user") + submitted_by = fields.Str(data_key="submitted_by") version = fields.Int(data_key="version") + @pre_dump + def get_submitted_by(self, obj, **kwargs): + """Get submitted by.""" + obj.submitted_by = obj.submitted_by_user.account_user.full_name if obj.submitted_by_user else None + return obj + class CreateSubmissionRequestSchema(Schema): """Create submission request schema.""" diff --git a/submit-web/src/App.tsx b/submit-web/src/App.tsx index 99e543cc..9da79171 100644 --- a/submit-web/src/App.tsx +++ b/submit-web/src/App.tsx @@ -15,7 +15,6 @@ const queryClient = new QueryClient(); function App() { return ( - diff --git a/submit-web/src/components/Submission/DocumentRow.tsx b/submit-web/src/components/Submission/DocumentRow.tsx index cff24a31..c6cff308 100644 --- a/submit-web/src/components/Submission/DocumentRow.tsx +++ b/submit-web/src/components/Submission/DocumentRow.tsx @@ -38,7 +38,7 @@ export default function DocumentRow({ documentSubmission }: DocumentRowProps) { const { submitted_document: { name, url }, version, - account_user, + submitted_by, } = documentSubmission; const getObjectFromS3 = async () => { @@ -77,9 +77,7 @@ export default function DocumentRow({ documentSubmission }: DocumentRowProps) { {name} - - {account_user?.full_name || ""} - + {submitted_by || ""} {version} diff --git a/submit-web/src/components/SubmissionItem/ConsultationRecord/index.tsx b/submit-web/src/components/SubmissionItem/ConsultationRecord/index.tsx index 913ea11f..170de191 100644 --- a/submit-web/src/components/SubmissionItem/ConsultationRecord/index.tsx +++ b/submit-web/src/components/SubmissionItem/ConsultationRecord/index.tsx @@ -230,7 +230,10 @@ export const ConsultationRecord = () => { { ...defaultUseQueryOptions, }); export const useGetUserByGuid = ({ guid }: GetUserByGuidOptions) => { - return useQuery(getUserByGuidQueryOptions({ guid })); + return useQuery({ + queryKey: [QUERY_KEY.ACCOUNT_USER, guid], + queryFn: () => getUserByGuid(guid), + enabled: Boolean(guid), + retry: false, + ...defaultUseQueryOptions, + }); }; diff --git a/submit-web/src/models/Submission.ts b/submit-web/src/models/Submission.ts index 1fafc25a..014fdb1a 100644 --- a/submit-web/src/models/Submission.ts +++ b/submit-web/src/models/Submission.ts @@ -1,4 +1,4 @@ -import { AccountUser } from "./AccountUser"; +import { User } from "./User"; export type SubmissionStatus = | "NEW_SUBMISSION" @@ -55,5 +55,5 @@ export type Submission = { submitted_document: DocumentSubmission; submitted_form: SubmittedForm; created_date: string; - account_user: AccountUser; + submitted_by: string; }; diff --git a/submit-web/src/models/User.ts b/submit-web/src/models/User.ts index d7b36e98..8a938db3 100644 --- a/submit-web/src/models/User.ts +++ b/submit-web/src/models/User.ts @@ -1,9 +1,13 @@ +import { AccountUser } from "./AccountUser"; + +export type UserType = "PROPONENT" | "STAFF"; +export const USER_TYPE = Object.freeze>({ + PROPONENT: "PROPONENT", + STAFF: "STAFF", +}); export interface User { id: number; - first_name: string; - last_name: string; - username: string; - email_address: string; - contact_number: string; - description: string; + auth_guid: string; + account_user: AccountUser; + type: UserType; } diff --git a/submit-web/src/routes/__root.tsx b/submit-web/src/routes/__root.tsx index 67f2c261..ccb5d545 100644 --- a/submit-web/src/routes/__root.tsx +++ b/submit-web/src/routes/__root.tsx @@ -2,7 +2,11 @@ import EAOAppBar from "@/components/Shared/layout/Header/EAOAppBar"; import Footer from "@/components/Shared/layout/Footer"; import PageNotFound from "@/components/Shared/PageNotFound"; import { Box } from "@mui/system"; -import { createRootRouteWithContext, Outlet } from "@tanstack/react-router"; +import { + CatchBoundary, + createRootRouteWithContext, + Outlet, +} from "@tanstack/react-router"; import { TanStackRouterDevtools } from "@tanstack/router-devtools"; import { AuthContextProps } from "react-oidc-context"; import { ReactQueryDevtools } from "@tanstack/react-query-devtools"; @@ -21,7 +25,10 @@ export const Route = createRootRouteWithContext()({ function Layout() { return ( - <> + "reset"} + onCatch={(error) => console.log("boundary error", error)} + > @@ -30,6 +37,6 @@ function Layout() {