Welcome to DooleyOnline - Emory University's marketplace platform for buying, selling, and chatting about items within the Emory community.
DooleyOnline is exclusively for Emory University students, faculty, and staff. Follow these steps to create your account:
- Visit dooleyonline.net
- Click on "Sign Up"
- Enter your @emory.edu email address
β οΈ Important: Only@emory.eduemail addresses are accepted- Example:
yourname@emory.edu
- Create a secure password
- Fill in your profile information
- Click "Create Account"
After signing up, you'll receive a verification email. However, Emory's email security system may block or quarantine the verification email.
If you don't see the verification email:
-
Check your spam/junk folder - The email might be filtered there
-
Check Emory's Quarantine System (Most Common Issue):
- Go to security.microsoft.com/quarantine
- Log in with your Emory credentials
- Look for an email from DooleyOnline
- Click on the email and select "Release" or "Approve"
- The verification email should now appear in your inbox
-
Open the verification link from the email
-
You'll see a confirmation message (even if it says "invalid verification", your account is likely verified)
-
Try logging in to confirm your account is active
Once verified, you can:
- Browse Items: Explore listings from the Emory community
- Post Items: List items you want to sell
- Chat with Sellers: Start conversations about items you're interested in
- Manage Your Profile: Update your information and preferences
- Browse all available items on the home page
- Use categories to filter items by type
- Search for specific items using keywords
- View item details, photos, and descriptions
- Click "Post Item" or "+"
- Upload clear photos of your item
- Add a descriptive title and detailed description
- Select the appropriate category
- Set your asking price
- Submit your listing
- Click on any item to view details
- Click "Message Seller" to start a conversation
- All your conversations are in one place in the "Messages" or "Chat" section
- Chat rooms show the name of the person you're talking with
- You can discuss multiple items in the same conversation
- Update your profile information in Settings
- View your posted items
- Track your conversations
- Manage your liked items
Solution: Emory's email system blocks suspicious senders. Follow these steps:
- Visit security.microsoft.com/quarantine
- Find the DooleyOnline verification email
- Release/approve it
- Check your inbox again
This is expected behavior! If you can log in successfully, your account is verified. The message is a known UI issue that doesn't affect functionality.
Click "Forgot Password" on the login page and follow the reset instructions. Make sure to check the quarantine system if you don't receive the reset email.
Unfortunately, DooleyOnline is exclusively for the Emory community. Only @emory.edu email addresses are supported at this time.
- Only Emory community members can access the platform
- All users are verified through their Emory email
- Report any suspicious activity or inappropriate content
- Never share sensitive personal information in chats
- Meet in safe, public locations when exchanging items
Having issues? Need help?
- Check the troubleshooting section above
- Contact the DooleyOnline team through the platform
- Report bugs or suggest features via our feedback form
The following section is for developers who want to contribute to or understand the technical implementation of DooleyOnline.
This backend service is built with Go and follows a clean architecture pattern:
- API Layer (
internal/api/) - HTTP handlers and middleware - Service Layer (
internal/service/) - Business logic - Data Layer (
internal/db/) - Database operations using sqlc - Models (
internal/model/) - Domain models - Storage (
internal/storage/) - File storage management
-
Authentication & Authorization
- JWT-based authentication
- Secure password hashing with bcrypt
- Email verification system
- Token management
-
Item Management
- CRUD operations for items
- Category-based organization
- Pagination support
- Image storage integration
-
User Management
- User registration and profiles
- Email verification
- Liked items tracking
- Viewed items history
-
Real-time Chat
- WebSocket-based messaging
- One-to-one chat rooms
- Message history
- Participant management
-
Storage Integration
- AWS S3-compatible storage
- Image processing and optimization
- Secure file uploads
- Language: Go 1.25
- Web Framework: Echo v4
- Database: PostgreSQL (via pgx/v5)
- Database Management: sqlc for type-safe SQL
- Authentication: JWT (golang-jwt/jwt/v5)
- Storage: AWS SDK v2
- WebSocket: Gorilla WebSocket
- Documentation: Swagger/OpenAPI
- Image Processing: disintegration/imaging
- Task Runner: Task (taskfile)
- AI Integration: Google Gen AI
- Go 1.25 or higher
- PostgreSQL database
- AWS S3 or S3-compatible storage (for file uploads)
- Task (optional, for task automation)
-
Clone the repository
git clone https://github.com/dooleyonline/backend.git cd backend -
Install dependencies
go mod download
-
Set up environment variables
Create a
.envfile in the root directory:# Environment ENV=development PORT=8080 # Database DATABASE_URL=postgres://username:password@localhost:5432/dooleyonline?sslmode=disable # Storage (AWS S3 or compatible) STORAGE_BUCKET=your-bucket-name STORAGE_URL=https://your-storage-url STORAGE_S3_URL=https://s3.your-region.amazonaws.com STORAGE_REGION=your-region STORAGE_ACCESS_ID=your-access-key-id STORAGE_ACCESS_SECRET=your-secret-access-key # Authentication AUTH_TOKEN_SECRET=your-secret-key-for-jwt # Email Service EMAIL_FROM=noreply@dooleyonline.net EMAIL_SERVICE_CONFIG=your-email-service-credentials
-
Generate database code (if needed)
task sql # or sqlc generate -
Generate API documentation
task docs # or swag init --dir ./internal/api,./internal/db/item,./internal/db/chat,./internal/db/user --generalInfo api.go --parseInternal --parseDependency
# Run the server
task run
# Run tests
task test
# Generate documentation
task docs
# Generate database code
task sql
# Run data generator
task datagen# Run the server
go run ./cmd/server
# Run tests
go test ./... -v# Build the image
docker build -t dooleyonline-backend .
# Run the container
docker run -p 8080:8080 --env-file .env dooleyonline-backendOnce the server is running, you can access the Swagger documentation at:
http://localhost:8080/swagger/index.html
.
βββ cmd/
β βββ datagen/ # Data generation utility
β βββ server/ # Main application entry point
βββ internal/
β βββ api/ # HTTP handlers
β β βββ auth/ # Authentication endpoints
β β βββ category/ # Category endpoints
β β βββ chat/ # Chat & WebSocket endpoints
β β βββ item/ # Item endpoints
β β βββ shared/ # Shared API utilities
β β βββ storage/ # File upload endpoints
β β βββ user/ # User endpoints
β βββ config/ # Configuration management
β βββ db/ # Database layer (sqlc generated)
β β βββ chat/ # Chat-related queries
β β β βββ message/ # Message operations
β β β βββ participant/ # Chat participant management
β β β βββ room/ # Chat room operations
β β βββ item/ # Item-related queries
β β β βββ category/ # Category operations
β β β βββ item/ # Item CRUD operations
β β βββ user/ # User-related queries
β β βββ liked/ # Liked items tracking
β β βββ user/ # User management
β β βββ verify/ # Email verification
β β βββ viewed/ # Viewed items tracking
β βββ model/ # Domain models
β βββ service/ # Business logic layer
β β βββ auth/ # Authentication & email service
β β βββ category/ # Category service
β β βββ chat/ # Chat & WebSocket service
β β βββ item/ # Item management service
β β βββ storage/ # File storage service
β β βββ user/ # User service
β βββ storage/ # AWS S3 storage client
βββ sqlc/ # SQL schemas and queries
βββ docs/ # Generated API documentation
βββ Dockerfile # Container definition
βββ go.mod # Go dependencies
βββ sqlc.yaml # sqlc configuration
βββ taskfile.yaml # Task automation
Run all tests:
go test ./... -vRun tests with coverage:
go test ./... -coverRun specific package tests:
go test ./internal/service/auth/... -v
go test ./internal/service/chat/... -vThis project uses raw SQL managed by sqlc. Schema definitions are in sqlc/*/schema.sql and queries are in sqlc/*/query.sql.
After modifying SQL files, regenerate the Go code:
task sql
# or
sqlc generate- Define the SQL schema in
sqlc/{domain}/{entity}/schema.sql - Define queries in
sqlc/{domain}/{entity}/query.sql - Generate database code:
task sql - Implement service logic in
internal/service/{domain}/ - Create handler in
internal/api/{domain}/ - Register routes in
internal/api/api.go - Update documentation:
task docs
The application uses an email verification system for new user registrations:
- Verification codes are generated and stored in the database
- Emails are sent via the configured email service
- Codes expire after a set time period
- Users must verify their
@emory.eduemail address - Only Emory domain emails are accepted
Note for Developers: Emory's Microsoft Exchange security may quarantine outgoing emails. Users need to approve these emails at security.microsoft.com/quarantine.
The chat system uses WebSocket connections for real-time messaging:
- One-to-one chat rooms only
- Real-time message delivery
- Message history persistence
- Automatic room creation between participants
- Connection management and cleanup
The application is containerized using Docker and can be deployed to any container orchestration platform:
# Build production image
docker build -t dooleyonline-backend:latest .
# Run with production config
docker run -d \
--name dooleyonline-backend \
-p 8080:8080 \
--env-file .env.production \
dooleyonline-backend:latest- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Make your changes
- Run tests (
go test ./...) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Echo Framework for the excellent web framework
- sqlc for type-safe SQL code generation
- Gorilla WebSocket for WebSocket implementation
- The Go community for amazing tools and libraries
- Emory University community for using and supporting DooleyOnline