ReportEmissionAllocationService: refactor
- Dominant language
- No language data
- Stars
- 0
- Forks
- 0
- PR merge metrics
- No merged PRs in 30d
Description
#### Description of the Tech Debt
A couple of issues in this service:
- N+1 query that should be done in an ORM query instead, pasting incriminated lines here
```py
for rp in report_products:
product_emission = report_product_emission_allocations.filter(
report_product_id=rp.id, emission_category__category_name=data["category_name"]
).first()
product = ReportProductEmissionAllocationSchemaOut(
report_product_id=rp.pk,
product_name=rp.product.name,
allocated_quantity=product_emission.allocated_quantity if product_emission else 0,
)
products.append(product)
```
- Dependency on Ninja schema types, we should be either passing ORM models or declaring our data types (with dataclasses)
#### Tech Debt Triage
The purpose of our technical debt triage process is to analyze technical debt to determine risk level of the technical debt and the value in tackling that technical debt.
#### Risk Value Scoring:
| Level | Value |
| ------ | --------------------- |
| High |
| Medium |
| Low |
| Technical Debt - Risk Types | Level | Value |
| ----------------------------------------------------------------------------------------------------------------------------- | ----- | ----- |
| Business Area Risk - Risk of business area visibility / damage to user experience | 0 | 0 |
| Developer Fault Risk - How likely will this tech debt cause a future error related to coding on top of it | 0 | 0 |
| System Fault Risk - Risk of system errors or application downtime | 0 | 0 |
| Time Scale Risk - Compound risk effect if left alone. How much more difficult to fix or dangerous will this become over time? | 0 | 0 |
| Time Sink Risk - How much will this tech debt slow the development process down | 0 | 0 |
|
#### Development Checklist:
- [ ] Checklist item
- [ ] Checklist item
- [ ] Checklist item
Contributor guide
No contributing guide indexed for this repository
Research direction
Start at ReportEmissionAllocationService and inspect the loop shown in the issue, then trace how report_product_emission_allocations and ReportProductEmissionAllocationSchemaOut are used. The work is done when the allocation lookup no longer causes an N+1 query and the service no longer depends on Ninja schema types, with the existing service behavior preserved.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- backend, database
- Issue type
- Refactor
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100