Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
3 changes: 0 additions & 3 deletions .github/workflows/frontend-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,6 @@ on:
jobs:
frontend:
runs-on: ubuntu-latest
defaults:
run:
working-directory: frontend

defaults:
run:
Expand Down
87 changes: 87 additions & 0 deletions backend/app/schemas/activity.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
from __future__ import annotations

import uuid
from datetime import datetime

from pydantic import BaseModel, ConfigDict, Field

from app.models.activity import ActivityType


class ActivityActor(BaseModel):
model_config = ConfigDict(from_attributes=True)

id: uuid.UUID
first_name: str
last_name: str
username: str
profile_image: str | None = None


class ActivityBase(BaseModel):
activity_type: ActivityType

title: str = Field(
...,
min_length=2,
max_length=255,
)

description: str | None = None

project_id: uuid.UUID | None = None
organization_id: uuid.UUID | None = None
repository_id: uuid.UUID | None = None
application_id: uuid.UUID | None = None
builder_flare_id: uuid.UUID | None = None

icon: str | None = Field(
default=None,
max_length=100,
)

color: str | None = Field(
default=None,
max_length=30,
)


class ActivityCreate(ActivityBase):
pass


class ActivityUpdate(BaseModel):
activity_type: ActivityType | None = None

title: str | None = Field(
default=None,
min_length=2,
max_length=255,
)

description: str | None = None

project_id: uuid.UUID | None = None
organization_id: uuid.UUID | None = None
repository_id: uuid.UUID | None = None
application_id: uuid.UUID | None = None
builder_flare_id: uuid.UUID | None = None

icon: str | None = Field(
default=None,
max_length=100,
)

color: str | None = Field(
default=None,
max_length=30,
)


class ActivityResponse(ActivityBase):
model_config = ConfigDict(from_attributes=True)

id: uuid.UUID
actor_id: uuid.UUID
actor: ActivityActor | None = None
created_at: datetime
36 changes: 36 additions & 0 deletions backend/app/services/activity_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,42 @@ def create_activity(

return db_activity

@staticmethod
def record_activity(
db: Session,
*,
actor_id: uuid.UUID,
activity_type: ActivityType,
title: str,
description: str | None = None,
project_id: uuid.UUID | None = None,
organization_id: uuid.UUID | None = None,
repository_id: uuid.UUID | None = None,
application_id: uuid.UUID | None = None,
builder_flare_id: uuid.UUID | None = None,
icon: str | None = None,
color: str | None = None,
) -> Activity:

activity = ActivityCreate(
activity_type=activity_type,
title=title,
description=description,
project_id=project_id,
organization_id=organization_id,
repository_id=repository_id,
application_id=application_id,
builder_flare_id=builder_flare_id,
icon=icon,
color=color,
)

return ActivityService.create_activity(
db=db,
actor_id=actor_id,
activity=activity,
)

@staticmethod
def get_activity(
db: Session,
Expand Down
12 changes: 12 additions & 0 deletions backend/app/services/follower_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@
from sqlalchemy import and_, select
from sqlalchemy.orm import Session

from app.models.activity import ActivityType
from app.models.follower import Follower
from app.services.activity_service import ActivityService


class FollowerService:
Expand All @@ -29,6 +31,16 @@ def follow_user(
db.commit()
db.refresh(relationship)

ActivityService.record_activity(
db=db,
actor_id=follower_id,
activity_type=ActivityType.FOLLOWED_USER,
title="Followed a builder",
description=str(following_id),
icon="user-plus",
color="success",
)

return relationship

@staticmethod
Expand Down
13 changes: 13 additions & 0 deletions backend/app/services/organization_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,13 @@
from sqlalchemy import select
from sqlalchemy.orm import Session

from app.models.activity import ActivityType
from app.models.organization import Organization
from app.schemas.organization import (
OrganizationCreate,
OrganizationUpdate,
)
from app.services.activity_service import ActivityService


class OrganizationService:
Expand Down Expand Up @@ -46,6 +48,17 @@ def create_organization(
db.commit()
db.refresh(db_organization)

ActivityService.record_activity(
db=db,
actor_id=owner_id,
activity_type=ActivityType.ORGANIZATION_CREATED,
title="Created organization",
description=db_organization.name,
organization_id=db_organization.id,
icon="building-2",
color="primary",
)

return db_organization

@staticmethod
Expand Down
35 changes: 35 additions & 0 deletions backend/app/services/project_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,10 @@
from sqlalchemy import select
from sqlalchemy.orm import Session

from app.models.activity import ActivityType
from app.models.project import Project
from app.schemas.project import ProjectCreate, ProjectUpdate
from app.services.activity_service import ActivityService


class ProjectService:
Expand Down Expand Up @@ -42,6 +44,17 @@ def create_project(
db.commit()
db.refresh(db_project)

ActivityService.record_activity(
db=db,
actor_id=owner_id,
activity_type=ActivityType.PROJECT_CREATED,
title="Created project",
description=db_project.title,
project_id=db_project.id,
icon="folder-plus",
color="primary",
)

return db_project

@staticmethod
Expand Down Expand Up @@ -97,6 +110,17 @@ def update_project(
db.commit()
db.refresh(db_project)

ActivityService.record_activity(
db=db,
actor_id=db_project.owner_id,
activity_type=ActivityType.PROJECT_UPDATED,
title="Updated project",
description=db_project.title,
project_id=db_project.id,
icon="pencil",
color="info",
)

return db_project

@staticmethod
Expand All @@ -110,6 +134,17 @@ def archive_project(
db.commit()
db.refresh(db_project)

ActivityService.record_activity(
db=db,
actor_id=db_project.owner_id,
activity_type=ActivityType.PROJECT_ARCHIVED,
title="Archived project",
description=db_project.title,
project_id=db_project.id,
icon="archive",
color="warning",
)

return db_project

@staticmethod
Expand Down
14 changes: 14 additions & 0 deletions backend/app/services/repository_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,13 @@
from sqlalchemy import select
from sqlalchemy.orm import Session

from app.models.activity import ActivityType
from app.models.repository import Repository
from app.schemas.repository import (
RepositoryCreate,
RepositoryUpdate,
)
from app.services.activity_service import ActivityService


class RepositoryService:
Expand Down Expand Up @@ -51,6 +53,18 @@ def connect_repository(
db.commit()
db.refresh(db_repository)

ActivityService.record_activity(
db=db,
actor_id=user_id,
activity_type=ActivityType.REPOSITORY_CONNECTED,
title="Connected repository",
description=db_repository.full_name,
project_id=db_repository.project_id,
repository_id=db_repository.id,
icon="git-branch",
color="success",
)

return db_repository

@staticmethod
Expand Down
22 changes: 22 additions & 0 deletions backend/app/services/user_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,10 @@
from sqlalchemy import select
from sqlalchemy.orm import Session

from app.models.activity import ActivityType
from app.models.user import User
from app.schemas.user import UserCreate, UserUpdate
from app.services.activity_service import ActivityService


class UserService:
Expand Down Expand Up @@ -56,6 +58,16 @@ def create_user(
db.commit()
db.refresh(db_user)

ActivityService.record_activity(
db=db,
actor_id=db_user.id,
activity_type=ActivityType.USER_REGISTERED,
title="Joined DevLink",
description=f"{db_user.first_name} {db_user.last_name} joined DevLink.",
icon="user-plus",
color="success",
)

return db_user

@staticmethod
Expand All @@ -73,6 +85,16 @@ def update_user(
db.commit()
db.refresh(db_user)

ActivityService.record_activity(
db=db,
actor_id=db_user.id,
activity_type=ActivityType.PROFILE_UPDATED,
title="Updated profile",
description=f"{db_user.first_name} {db_user.last_name} updated their profile.",
icon="user-round-pen",
color="info",
)

return db_user

@staticmethod
Expand Down
Loading
Loading