Skip to content

Commit 4673554

Browse files
committed
add campaign api
1 parent 091f3ec commit 4673554

4 files changed

Lines changed: 53 additions & 11 deletions

File tree

mind_matter_api/api/campaigns.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
from flask import jsonify, request, current_app
2+
from marshmallow import ValidationError
3+
4+
from mind_matter_api.services.campaigns import CampaignsService
5+
from mind_matter_api.utils.decorators import require_auth, require_owner
6+
from mind_matter_api.utils.auth import is_user_owner, is_user_admin
7+
import logging
8+
9+
logging.basicConfig(level=logging.DEBUG)
10+
11+
def init_campaigns_routes(app):
12+
campaign_service: CampaignsService = app.campaigns_service
13+
14+
@app.route('/campaigns', methods=['GET'])
15+
@require_auth
16+
def get_campaigns(user_id):
17+
return campaign_service.get_campaigns(user_id)
18+
19+
@app.route('/campaigns/<int:campaign_id>/survey-responses-count', methods=['GET'])
20+
@require_auth
21+
def get_survey_responses_count(campaign_id):
22+
return campaign_service.get_survey_responses_count(campaign_id)
23+
24+
@app.route('/campaigns/<int:campaign_id>/participation', methods=['GET'])
25+
@require_auth
26+
def get_campaign_participation(campaign_id):
27+
return campaign_service.get_campaign_participation(campaign_id)
28+

mind_matter_api/api/emergency_contacts.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,14 @@
99
logging.basicConfig(level=logging.DEBUG)
1010

1111
def init_emergency_contacts_routes(app):
12-
svc: EmergencyContactsService = app.emergency_contacts_service
12+
emergency_contact_service: EmergencyContactsService = app.emergency_contacts_service
1313

1414
@app.route('/emergency-contacts', methods=['GET'])
1515
@require_auth
1616
def get_emergency_contacts(user_id):
1717
"""Get all emergency contacts for the current user"""
1818
try:
19-
emergency_contacts = svc.get_emergency_contacts(user_id)
19+
emergency_contacts = emergency_contact_service.get_emergency_contacts(user_id)
2020
return jsonify(EmergencyContactSchema(many=True).dump(emergency_contacts)), 200
2121
except Exception as e:
2222
app.logger.error(f"Error retrieving emergency contacts: {str(e)}")
@@ -38,7 +38,7 @@ def create_emergency_contact(user_id):
3838
contact_data = EmergencyContactSchema().dump(validated_data)
3939

4040
# Create the emergency contact
41-
new_contact = svc.create_emergency_contacts(user_id, contact_data)
41+
new_contact = emergency_contact_service.create_emergency_contacts(user_id, contact_data)
4242

4343
return jsonify(EmergencyContactSchema().dump(new_contact)), 201
4444
except ValidationError as err:
@@ -54,7 +54,7 @@ def update_emergency_contact(user_id, contact_id):
5454
"""Update an existing emergency contact"""
5555
try:
5656
# First check if the contact exists
57-
contact = svc.emergency_contacts_repository.get_by_id(contact_id)
57+
contact = emergency_contact_service.emergency_contacts_repository.get_by_id(contact_id)
5858
if not contact:
5959
return jsonify({'error': 'Emergency contact not found'}), 404
6060

@@ -68,7 +68,7 @@ def update_emergency_contact(user_id, contact_id):
6868
# Validate the data
6969
data = EmergencyContactSchema().load(request_data, partial=True)
7070
# Update the contact
71-
updated = svc.update_emergency_contacts(contact_id, data)
71+
updated = emergency_contact_service.update_emergency_contacts(contact_id, data)
7272
return jsonify(EmergencyContactSchema().dump(updated)), 200
7373
except ValidationError as err:
7474
app.logger.error(f"Validation error: {err.messages}")
@@ -83,15 +83,15 @@ def delete_emergency_contact(user_id, contact_id):
8383
"""Delete an emergency contact"""
8484
try:
8585
# First check if the contact exists
86-
contact = svc.emergency_contacts_repository.get_by_id(contact_id)
86+
contact = emergency_contact_service.emergency_contacts_repository.get_by_id(contact_id)
8787
if not contact:
8888
return jsonify({'error': 'Emergency contact not found'}), 404
8989

9090
# Then check ownership
9191
if not is_user_owner(user_id, contact) and not is_user_admin(user_id):
9292
return jsonify({'error': 'Permission denied'}), 403
9393

94-
svc.delete_emergency_contacts(contact_id)
94+
emergency_contact_service.delete_emergency_contacts(contact_id)
9595
return '', 204
9696
except Exception as e:
9797
app.logger.error(f"Error deleting emergency contact: {str(e)}")

mind_matter_api/repositories/campaigns.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from typing import Any, Dict, List, Optional
2-
from mind_matter_api.models.campaigns import Campaign
3-
from mind_matter_api.repositories.type import Repository
2+
from mind_matter_api.models.campaigns import Campaign, CampaignParticipation
3+
from mind_matter_api.repositories.types import Repository
44
from mind_matter_api.models import db
55

66
class CampaignRepository(Repository):
@@ -36,4 +36,10 @@ def delete(self, resource_id: Any) -> None:
3636
if not campaign:
3737
raise ValueError("Resource not found")
3838
self.session.delete(campaign)
39-
self.session.commit()
39+
self.session.commit()
40+
41+
def get_survey_responses_count(self, campaign_id: str) -> int:
42+
return self.session.query(Campaign).filter(Campaign.campaign_id == campaign_id).count()
43+
44+
def get_campaign_participation(self, campaign_id: str) -> CampaignParticipation:
45+
return self.session.query(CampaignParticipation).filter(CampaignParticipation.campaign_id == campaign_id).all()

mind_matter_api/services/campaigns.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from mind_matter_api.services.types import BaseService
2-
from mind_matter_api.models.campaigns import Campaigns
2+
from mind_matter_api.models.campaigns import Campaigns, CampaignParticipation
33
from mind_matter_api.repositories.campaigns import CampaignsRepository
44

55
class CampaignsService(BaseService):
@@ -10,6 +10,14 @@ def get_campaigns(self, user_id: str) -> Campaigns:
1010
campaigns = self.campaigns_repository.get(user_id)
1111
return campaigns
1212

13+
def get_survey_responses_count(self, campaign_id: str) -> int:
14+
survey_responses_count = self.campaigns_repository.get_survey_responses_count(campaign_id)
15+
return survey_responses_count
16+
17+
def get_campaign_participation(self, campaign_id: str) -> CampaignParticipation:
18+
campaign_participation = self.campaigns_repository.get_campaign_participation(campaign_id)
19+
return campaign_participation
20+
1321
def create_campaigns(self, user_data: Campaigns) -> Campaigns:
1422
new_campaigns = Campaigns(**user_data)
1523
created_campaigns = self.campaigns_repository.create(new_campaigns)

0 commit comments

Comments
 (0)