• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

gcivil-nyu-org / wed-fall24-team1 / #36

06 Nov 2024 08:02PM UTC coverage: 75.359% (+0.5%) from 74.855%
#36

push

coveralls-python

web-flow
#101 As a Service Provider, I want to respond to reviews to address feedback or provide additional information (#121)

40 of 109 new or added lines in 6 files covered. (36.7%)

119 existing lines in 6 files now uncovered.

1208 of 1603 relevant lines covered (75.36%)

0.75 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

75.0
/src/services/models.py
1
# from django.db import models
2

3
# Create your models here.
4
from dataclasses import dataclass, field
1✔
5
from decimal import Decimal
1✔
6
from typing import Dict, Any
1✔
7
import uuid
1✔
8

9
from public_service_finder.utils.enums.service_status import ServiceStatus
1✔
10

11

12
@dataclass
1✔
13
class ServiceDTO:
1✔
14
    """Data Transfer Object for Service"""
15

16
    id: str
1✔
17
    name: str
1✔
18
    address: str
1✔
19
    latitude: Decimal
1✔
20
    longitude: Decimal
1✔
21
    ratings: Decimal
1✔
22
    description: Dict[str, Any]
1✔
23
    category: str
1✔
24
    provider_id: str
1✔
25
    service_status: str
1✔
26
    service_created_timestamp: str
1✔
27
    service_approved_timestamp: str
1✔
28

29
    @classmethod
1✔
30
    def from_dynamodb_item(cls, item: Dict[str, Any]) -> "ServiceDTO":
1✔
31
        """Create ServiceDTO from DynamoDB item"""
32
        service_status = item.get("ServiceStatus", "PENDING_APPROVAL")
×
33
        if service_status.startswith("ServiceStatus."):
×
34
            service_status = service_status.split(".")[1]
×
35
        return cls(
×
36
            id=item["Id"],
37
            name=item["Name"],
38
            address=item["Address"],
39
            latitude=Decimal(str(item["Lat"])),
40
            longitude=Decimal(str(item["Log"])),
41
            ratings=item["Ratings"],
42
            description=item["Description"],
43
            category=item["Category"],
44
            provider_id=item["ProviderId"],
45
            service_status=ServiceStatus(service_status).value,
46
            service_created_timestamp=item.get("CreatedTimestamp", "NONE"),
47
            service_approved_timestamp=item.get("ApprovedTimestamp", "NONE"),
48
        )
49

50
    def to_dynamodb_item(self) -> Dict[str, Any]:
1✔
51
        """Convert to DynamoDB item format"""
52
        return {
×
53
            "Id": self.id or str(uuid.uuid4()),
54
            "Name": self.name,
55
            "Address": self.address,
56
            "Lat": self.latitude,
57
            "Log": self.longitude,
58
            "Ratings": self.ratings or Decimal("0"),
59
            "Description": self.description,
60
            "Category": self.category,
61
            "ProviderId": self.provider_id,
62
            "ServiceStatus": self.service_status,
63
            "CreatedTimestamp": self.service_created_timestamp,
64
            "ApprovedTimestamp": self.service_approved_timestamp,
65
        }
66

67

68
@dataclass
1✔
69
class ReviewDTO:
1✔
70
    """Data Transfer Object for Review"""
71

72
    review_id: str
1✔
73
    service_id: str
1✔
74
    user_id: str
1✔
75
    username: str
1✔
76
    rating_stars: int
1✔
77
    rating_message: str
1✔
78
    timestamp: str
1✔
79
    responseText: str = field(default="")
1✔
80
    responded_at: str = field(default="")
1✔
81

82
    @classmethod
1✔
83
    def from_dynamodb_item(cls, review_data: Dict[str, Any]) -> "ReviewDTO":
1✔
84
        """Create ReviewDTO from review data in DynamoDB item"""
NEW
85
        return cls(
×
86
            review_id=review_data["ReviewId"],
87
            service_id=review_data["ServiceId"],
88
            user_id=review_data["UserId"],
89
            username=review_data["Username"],
90
            rating_stars=int(review_data["RatingStars"]),
91
            rating_message=review_data["RatingMessage"],
92
            timestamp=review_data["Timestamp"],
93
            responseText=review_data.get("ResponseText", ""),
94
            responded_at=review_data.get("RespondedAt", ""),
95
        )
96

97
    def to_dynamodb_item(self) -> Dict[str, Any]:
1✔
98
        """Convert to DynamoDB review data format"""
NEW
99
        item = {
×
100
            "ReviewId": self.review_id or str(uuid.uuid4()),
101
            "ServiceId": self.service_id,
102
            "UserId": self.user_id,
103
            "Username": self.username,
104
            "RatingStars": str(self.rating_stars),
105
            "RatingMessage": self.rating_message,
106
            "Timestamp": self.timestamp,
107
        }
NEW
108
        if self.responseText:
×
NEW
109
            item["ResponseText"] = self.responseText
×
NEW
110
        if self.responded_at:
×
NEW
111
            item["RespondedAt"] = self.responded_at
×
NEW
112
        return item
×
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc