# kpsravan/craftdemo architecture

> Architecture diagram of the GitHub repository kpsravan/craftdemo, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-26). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/kpsravan/craftdemo
- Repository: https://github.com/kpsravan/craftdemo

## Overview

craftdemo is a Java/Spring social-feed application. Its evidenced user-to-result workflow is an authenticated caller requesting a paginated feed; the controller fetches tweets for that user, groups replies under parent tweets, converts them to DTOs, and returns a feed response. User lookup supports authentication, while the service/DAO layer queries persisted entities. The model also defines follow and follow-request concepts, but no sampled runtime code shows their workflows. The README provides no further capability detail, and unsampled wiring is omitted.

Main entry points: [`craftdemo-api/src/main/java/com/intuit/demo/api/FeedController.java`](https://github.com/kpsravan/craftdemo/blob/master/craftdemo-api/src/main/java/com/intuit/demo/api/FeedController.java) (Feed endpoint), [`craftdemo-service/src/main/java/com/intuit/demo/dao/BaseDAO.java`](https://github.com/kpsravan/craftdemo/blob/master/craftdemo-service/src/main/java/com/intuit/demo/dao/BaseDAO.java) (JPA data access), [`craftdemo-service/src/main/java/com/intuit/demo/service/TweetService.java`](https://github.com/kpsravan/craftdemo/blob/master/craftdemo-service/src/main/java/com/intuit/demo/service/TweetService.java) (Tweet query service), [`craftdemo-service/src/main/java/com/intuit/demo/service/UserService.java`](https://github.com/kpsravan/craftdemo/blob/master/craftdemo-service/src/main/java/com/intuit/demo/service/UserService.java) (User lookup service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["API and security"]
  node_feed["Feed endpoint"]
  node_feed_response["Feed response<br/>[FeedResponse.java]"]
  node_tweet_dto["Tweet DTO<br/>[TweetDTO.java]"]
  node_auth_lookup["User authentication lookup"]
  node_auth_entry["Unauthorized response"]
end

subgraph group_services["Application services"]
  node_user_service["User lookup service<br/>[UserService.java]"]
  node_tweet_service["Tweet query service<br/>[TweetService.java]"]
end

subgraph group_persistence["Persistence"]
  node_dao["JPA data access<br/>[BaseDAO.java]"]
  node_database[("Relational persistence<br/>[persistence.xml]")]
end

subgraph group_domain["Social domain"]
  node_user["User entity<br/>[User.java]"]
  node_tweet["Tweet entity<br/>[Tweet.java]"]
  node_follower["Follower entity<br/>[Follower.java]"]
  node_follow_request["Follow request entity"]
end

node_caller(("Authenticated caller"))

node_caller -->|"requests feed"| node_feed
node_feed -->|"queries page"| node_tweet_service
node_tweet_service -->|"fetches tweets"| node_dao
node_dao -->|"queries entities"| node_database
node_dao -->|"reads"| node_tweet
node_tweet_service -->|"returns tweets"| node_feed
node_feed -->|"converts and groups"| node_tweet_dto
node_feed -->|"builds response"| node_feed_response
node_feed -->|"returns feed"| node_caller
node_auth_lookup -->|"loads user"| node_user_service
node_user_service -->|"looks up user"| node_dao
node_dao -->|"reads"| node_user

click node_feed "https://github.com/kpsravan/craftdemo/blob/master/craftdemo-api/src/main/java/com/intuit/demo/api/FeedController.java"
click node_feed_response "https://github.com/kpsravan/craftdemo/blob/master/craftdemo-api/src/main/java/com/intuit/demo/dto/FeedResponse.java"
click node_tweet_dto "https://github.com/kpsravan/craftdemo/blob/master/craftdemo-api/src/main/java/com/intuit/demo/dto/TweetDTO.java"
click node_auth_lookup "https://github.com/kpsravan/craftdemo/blob/master/craftdemo-api/src/main/java/com/intuit/demo/api/security/DummyUserService.java"
click node_auth_entry "https://github.com/kpsravan/craftdemo/blob/master/craftdemo-api/src/main/java/com/intuit/demo/api/security/BasicAuthEntryoint.java"
click node_user_service "https://github.com/kpsravan/craftdemo/blob/master/craftdemo-service/src/main/java/com/intuit/demo/service/UserService.java"
click node_tweet_service "https://github.com/kpsravan/craftdemo/blob/master/craftdemo-service/src/main/java/com/intuit/demo/service/TweetService.java"
click node_dao "https://github.com/kpsravan/craftdemo/blob/master/craftdemo-service/src/main/java/com/intuit/demo/dao/BaseDAO.java"
click node_database "https://github.com/kpsravan/craftdemo/blob/master/craftdemo-model/src/main/resources/META-INF/persistence.xml"
click node_user "https://github.com/kpsravan/craftdemo/blob/master/craftdemo-model/src/main/java/com/intuit/demo/model/User.java"
click node_tweet "https://github.com/kpsravan/craftdemo/blob/master/craftdemo-model/src/main/java/com/intuit/demo/model/Tweet.java"
click node_follower "https://github.com/kpsravan/craftdemo/blob/master/craftdemo-model/src/main/java/com/intuit/demo/model/Follower.java"
click node_follow_request "https://github.com/kpsravan/craftdemo/blob/master/craftdemo-model/src/main/java/com/intuit/demo/model/FollowerRequest.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_feed,node_feed_response,node_tweet_dto,node_auth_lookup,node_auth_entry toneBlue
class node_user_service,node_tweet_service toneAmber
class node_dao,node_database toneMint
class node_user,node_tweet,node_follower,node_follow_request toneRose
class node_caller toneIndigo
```

## Components

### API and security

- [Feed endpoint](https://github.com/kpsravan/craftdemo/blob/master/craftdemo-api/src/main/java/com/intuit/demo/api/FeedController.java): `craftdemo-api/src/main/java/com/intuit/demo/api/FeedController.java`
- [Feed response](https://github.com/kpsravan/craftdemo/blob/master/craftdemo-api/src/main/java/com/intuit/demo/dto/FeedResponse.java): `craftdemo-api/src/main/java/com/intuit/demo/dto/FeedResponse.java`
- [Tweet DTO](https://github.com/kpsravan/craftdemo/blob/master/craftdemo-api/src/main/java/com/intuit/demo/dto/TweetDTO.java): `craftdemo-api/src/main/java/com/intuit/demo/dto/TweetDTO.java`
- [User authentication lookup](https://github.com/kpsravan/craftdemo/blob/master/craftdemo-api/src/main/java/com/intuit/demo/api/security/DummyUserService.java): `craftdemo-api/src/main/java/com/intuit/demo/api/security/DummyUserService.java`
- [Unauthorized response](https://github.com/kpsravan/craftdemo/blob/master/craftdemo-api/src/main/java/com/intuit/demo/api/security/BasicAuthEntryoint.java): `craftdemo-api/src/main/java/com/intuit/demo/api/security/BasicAuthEntryoint.java`

### Application services

- [User lookup service](https://github.com/kpsravan/craftdemo/blob/master/craftdemo-service/src/main/java/com/intuit/demo/service/UserService.java): `craftdemo-service/src/main/java/com/intuit/demo/service/UserService.java`
- [Tweet query service](https://github.com/kpsravan/craftdemo/blob/master/craftdemo-service/src/main/java/com/intuit/demo/service/TweetService.java): `craftdemo-service/src/main/java/com/intuit/demo/service/TweetService.java`

### Persistence

- [JPA data access](https://github.com/kpsravan/craftdemo/blob/master/craftdemo-service/src/main/java/com/intuit/demo/dao/BaseDAO.java): `craftdemo-service/src/main/java/com/intuit/demo/dao/BaseDAO.java`
- [Relational persistence](https://github.com/kpsravan/craftdemo/blob/master/craftdemo-model/src/main/resources/META-INF/persistence.xml): `craftdemo-model/src/main/resources/META-INF/persistence.xml`

### Social domain

- [User entity](https://github.com/kpsravan/craftdemo/blob/master/craftdemo-model/src/main/java/com/intuit/demo/model/User.java): `craftdemo-model/src/main/java/com/intuit/demo/model/User.java`
- [Tweet entity](https://github.com/kpsravan/craftdemo/blob/master/craftdemo-model/src/main/java/com/intuit/demo/model/Tweet.java): `craftdemo-model/src/main/java/com/intuit/demo/model/Tweet.java`
- [Follower entity](https://github.com/kpsravan/craftdemo/blob/master/craftdemo-model/src/main/java/com/intuit/demo/model/Follower.java): `craftdemo-model/src/main/java/com/intuit/demo/model/Follower.java`
- [Follow request entity](https://github.com/kpsravan/craftdemo/blob/master/craftdemo-model/src/main/java/com/intuit/demo/model/FollowerRequest.java): `craftdemo-model/src/main/java/com/intuit/demo/model/FollowerRequest.java`

### Other components

- **Authenticated caller**

## Connections

- Authenticated caller → Feed endpoint: requests feed
- Feed endpoint → Tweet query service: queries page
- Tweet query service → JPA data access: fetches tweets
- JPA data access → Relational persistence: queries entities
- JPA data access → Tweet entity: reads
- Tweet query service → Feed endpoint: returns tweets
- Feed endpoint → Tweet DTO: converts and groups
- Feed endpoint → Feed response: builds response
- Feed endpoint → Authenticated caller: returns feed
- User authentication lookup → User lookup service: loads user
- User lookup service → JPA data access: looks up user
- JPA data access → User entity: reads
