diff --git a/submit-api/src/submit_api/models/account_project.py b/submit-api/src/submit_api/models/account_project.py index 48c9b7b8..5bf1bd8b 100644 --- a/submit-api/src/submit_api/models/account_project.py +++ b/submit-api/src/submit_api/models/account_project.py @@ -28,17 +28,17 @@ class AccountProject(BaseModel): @property def latest_packages(self): """Get the latest packages by versions for the account project.""" - # version_by_package = {} - # - # for package in self._packages: - # original_package_id = package.version.original_package_id - # if original_package_id not in version_by_package: - # version_by_package[original_package_id] = package - # else: - # if package.version.version > version_by_package[original_package_id].version.version: - # version_by_package[original_package_id] = package - - return self._packages + version_by_package = {} + + for package in self._packages: + original_package_id = package.version.original_package_id + if original_package_id not in version_by_package: + version_by_package[original_package_id] = package + else: + if package.version.version > version_by_package[original_package_id].version.version: + version_by_package[original_package_id] = package + + return list(version_by_package.values()) @classmethod def add_projects_bulk(cls, projects): diff --git a/submit-api/src/submit_api/models/package.py b/submit-api/src/submit_api/models/package.py index 94fab9dc..915c0591 100644 --- a/submit-api/src/submit_api/models/package.py +++ b/submit-api/src/submit_api/models/package.py @@ -48,13 +48,13 @@ class Package(BaseModel): status = Column(db.ARRAY(Enum(PackageStatus)), nullable=False, default=[PackageStatus.NEW_SUBMISSION.value]) active = Column(db.Boolean, nullable=False, default=True) - update_requests = db.relationship( - 'UpdateRequest', - backref='submission_package', - lazy='joined', - primaryjoin='and_(UpdateRequest.submission_package_id == Package.id, UpdateRequest.active.is_(True))', - order_by='UpdateRequest.created_date', - foreign_keys='UpdateRequest.submission_package_id') + # update_requests = db.relationship( + # 'UpdateRequest', + # backref='submission_package', + # lazy='joined', + # primaryjoin='and_(UpdateRequest.submission_package_id == Package.id, UpdateRequest.active.is_(True))', + # order_by='UpdateRequest.created_date', + # foreign_keys='UpdateRequest.submission_package_id') version = db.relationship( 'PackageVersion', @@ -68,3 +68,8 @@ class Package(BaseModel): def get_package_by_id_with_items(cls, package_id: int): """Return model by package id.""" return cls.query.filter_by(id=package_id).options(joinedload(Package.items)).first() + + @classmethod + def get_all(cls): + """Get all packages.""" + return cls.query.all() diff --git a/submit-api/src/submit_api/resources/staff/package.py b/submit-api/src/submit_api/resources/staff/package.py index 72346ed7..e59e748e 100644 --- a/submit-api/src/submit_api/resources/staff/package.py +++ b/submit-api/src/submit_api/resources/staff/package.py @@ -141,3 +141,25 @@ def post(package_id, update_request_id): package_with_update_request_note = PackageService.create_update_request_note( package_id, update_request_id, create_update_request_data) return StaffPackageSchema().dump(package_with_update_request_note), HTTPStatus.CREATED + + +@cors_preflight("GET, OPTIONS") +@API.route( + "/", + methods=["GET", "OPTIONS"], +) +class PackagesTest(Resource): + """Resource for managing a package.""" + + @staticmethod + @ApiHelper.swagger_decorators(API, endpoint_description="Get package by id") + @API.response( + code=HTTPStatus.OK, model=package_model, description="Get package" + ) + @API.response(HTTPStatus.BAD_REQUEST, "Bad Request") + @auth.has_one_of_roles([EpicSubmitRole.EAO_VIEW.value]) + @cors.crossdomain(origin="*") + def get(): + """Get packages.""" + packages = PackageService.get_all() + return StaffPackageSchema().dump(packages, many=True), HTTPStatus.OK diff --git a/submit-api/src/submit_api/services/package.py b/submit-api/src/submit_api/services/package.py index e28e414a..6e67f72d 100644 --- a/submit-api/src/submit_api/services/package.py +++ b/submit-api/src/submit_api/services/package.py @@ -31,6 +31,10 @@ class PackageService: """Package management service.""" + @classmethod + def get_all(cls): + return PackageModel.get_all() + @classmethod def get_package_by_id(cls, package_id): """Get package by id."""