mirror of
https://github.com/ION606/MailPocket.git
synced 2026-05-14 22:06:55 +00:00
156 lines
4.5 KiB
Markdown
156 lines
4.5 KiB
Markdown
# Forms Server
|
|
|
|
An extremely lightweight server written in Go to collect email form submissions. This project provides two independent server implementations:
|
|
|
|
1. **Batched Write Server**: A dependency-free server that stores emails in a CSV file.
|
|
2. **SQLite Server**: A server that uses SQLite for reliable and structured email storage.
|
|
|
|
Both servers are designed to be simple, efficient, and easy to deploy.
|
|
|
|
---
|
|
|
|
## Features
|
|
|
|
- **Batched Write Server**:
|
|
- No external dependencies.
|
|
- Stores emails in a CSV file (`emails.csv`).
|
|
- Batches writes to reduce disk I/O.
|
|
- Lightweight and minimalistic.
|
|
|
|
- **SQLite Server**:
|
|
- Uses SQLite for structured and reliable email storage.
|
|
- Prevents duplicate emails with a unique constraint.
|
|
- Easy to query and manage stored emails.
|
|
- Slightly more robust and feature-rich.
|
|
|
|
---
|
|
|
|
## Getting Started
|
|
|
|
### Prerequisites
|
|
|
|
- Go 1.20 or higher.
|
|
- For the SQLite Server, the `modernc.org/sqlite` dependency will be installed automatically.
|
|
|
|
---
|
|
|
|
### Running the Servers
|
|
1.0 Clone the repository:
|
|
```bash
|
|
git clone https://github.com/your-username/forms-server.git
|
|
cd forms-server
|
|
```
|
|
|
|
2.0 Using the Makefile:
|
|
- ```bash
|
|
make run-batched # for CSV-based
|
|
```
|
|
- ```bash
|
|
make run-sqlite # for SQLite-based
|
|
```
|
|
|
|
2.1 **Batched Write Server**:
|
|
- Navigate to the `batched-server` directory:
|
|
```bash
|
|
cd batched-server
|
|
```
|
|
- Run the server manually:
|
|
```bash
|
|
go run main.go
|
|
```
|
|
- The server will start on `http://localhost:3000`.
|
|
|
|
2.2 **SQLite Server**:
|
|
- Navigate to the `sqlite-server` directory:
|
|
```bash
|
|
cd sqlite-server
|
|
```
|
|
- Install dependencies (if not already installed):
|
|
```bash
|
|
go mod tidy
|
|
```
|
|
- Run the server manually:
|
|
```bash
|
|
go run main.go
|
|
```
|
|
- The server will start on `http://localhost:3000`.
|
|
|
|
---
|
|
|
|
### API Endpoints
|
|
|
|
Both servers expose the following endpoints:
|
|
|
|
- **`GET /`**:
|
|
- Returns a `200 OK` status with a message indicating the server is running.
|
|
- Example response:
|
|
```json
|
|
"Batched Write Server is running"
|
|
```
|
|
|
|
- **`POST /submit`**:
|
|
- Accepts a form submission with an `email` field.
|
|
- Example request:
|
|
```bash
|
|
curl -X POST -d "email=user@example.com" http://localhost:3000/submit
|
|
```
|
|
- Example response:
|
|
```json
|
|
{"message": "data received"}
|
|
```
|
|
|
|
---
|
|
|
|
## Server Implementations
|
|
|
|
### 1. Batched Write Server (CSV-based)
|
|
|
|
- **Purpose**: A dependency-free implementation for users who want minimalism and simplicity.
|
|
- **Storage**: Emails are appended to a CSV file (`emails.csv`) in the `batched-server` directory.
|
|
- **Performance**: Batches writes to reduce disk I/O, flushing every 5 seconds or after 100 emails.
|
|
- **Format**: Each row in the CSV file contains an email and a timestamp.
|
|
- **Use Case**: Ideal for lightweight deployments where external dependencies are not desired.
|
|
|
|
### 2. SQLite Server
|
|
|
|
- **Purpose**: A more robust implementation using SQLite for structured storage.
|
|
- **Storage**: Emails are stored in an SQLite database (`emails.db`) in the `sqlite-server` directory.
|
|
- **Features**:
|
|
- Prevents duplicate emails with a unique constraint.
|
|
- Tracks the creation timestamp of each email.
|
|
- **Use Case**: Ideal for deployments where data integrity and querying capabilities are important.
|
|
|
|
---
|
|
|
|
## Configuration
|
|
|
|
- **Port**: Both servers run on port `3000` by default. To change the port, modify the `PORT` constant in the respective `main.go` file.
|
|
- **Storage Location**:
|
|
- Batched Write Server: Emails are stored in `batched-server/emails.csv`.
|
|
- SQLite Server: Emails are stored in `sqlite-server/emails.db`.
|
|
|
|
---
|
|
|
|
## Trade-offs
|
|
|
|
| Feature | Batched Write Server (CSV) | SQLite Server |
|
|
|------------------------|------------------------------|-----------------------------|
|
|
| **Dependencies** | None | Requires SQLite dependency |
|
|
| **Storage** | CSV file | SQLite database |
|
|
| **Data Integrity** | Basic | High (prevents duplicates) |
|
|
| **Querying** | Not supported | Supported |
|
|
| **Performance** | High (batched writes) | High (SQLite optimized) |
|
|
| **Use Case** | Minimalist, dependency-free | Robust, structured storage |
|
|
|
|
---
|
|
|
|
## Contributing
|
|
|
|
Contributions are welcome! Please open an issue or submit a pull request for any improvements or bug fixes.
|
|
|
|
---
|
|
|
|
## License
|
|
|
|
This project is licensed under the MIT License. See the [LICENSE](LICENSE) file for details.
|