Skip to content

Commit 79b9362

Browse files
Merge pull request #5 from authxt/docs
feat: add docs for project defence
2 parents d165ec1 + 5851bf4 commit 79b9362

3 files changed

Lines changed: 620 additions & 0 deletions

File tree

project-docs/design_rationale.md

Lines changed: 255 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,255 @@
1+
# Document Management System - Design Rationale
2+
3+
## 1. Modular Architecture Benefits
4+
5+
### 1.1 Separation of Concerns
6+
```
7+
src/
8+
├── main.c # Core program flow
9+
├── cli.c # Command-line handling
10+
├── file_ops.c # File operations
11+
└── utils.c # Utility functions
12+
```
13+
14+
**Why This is Better:**
15+
1. **Maintainability**
16+
- Each module has a single responsibility
17+
- Easier to find and fix bugs
18+
- Can modify one component without affecting others
19+
20+
2. **Testability**
21+
- Can test each module independently
22+
- Easier to write unit tests
23+
- Can mock dependencies for testing
24+
25+
3. **Reusability**
26+
- Utility functions can be reused across modules
27+
- Can use components in other projects
28+
- Reduces code duplication
29+
30+
## 2. Data Structure Design
31+
32+
### 2.1 Command Arguments Structure
33+
```c
34+
typedef struct {
35+
command_type_t cmd_type;
36+
char category[64];
37+
char filename[256];
38+
bool valid;
39+
} command_args_t;
40+
```
41+
42+
**Benefits:**
43+
1. **Type Safety**
44+
- Prevents command type errors
45+
- Fixed buffer sizes prevent overflow
46+
- Boolean validation flag for error checking
47+
48+
2. **Clean Interface**
49+
- All related data grouped together
50+
- Easy to pass between functions
51+
- Clear what data is needed for commands
52+
53+
## 3. File System Organization
54+
55+
```
56+
data/
57+
├── recipes/ # Category-based organization
58+
├── notes/
59+
├── logs/ # Operation history
60+
└── versions/ # Backup storage
61+
```
62+
63+
**Advantages:**
64+
1. **Data Organization**
65+
- Clear separation of different document types
66+
- Easy to find and manage files
67+
- Natural hierarchy for document management
68+
69+
2. **Version Control**
70+
- Separate versions directory keeps backups organized
71+
- Original files remain in their categories
72+
- Easy to track file history
73+
74+
3. **Logging System**
75+
- Centralized logs for all operations
76+
- Easy to audit system usage
77+
- Helps in troubleshooting
78+
79+
## 4. Error Handling Strategy
80+
81+
### 4.1 Comprehensive Error Checking
82+
```c
83+
if (!ensure_category_dir(category)) {
84+
log_error("Failed to create directory");
85+
return false;
86+
}
87+
```
88+
89+
**Why This Approach:**
90+
1. **Reliability**
91+
- Every operation is checked for failure
92+
- Resources are properly cleaned up
93+
- System stays in consistent state
94+
95+
2. **Debugging**
96+
- Clear error messages
97+
- Operation logging helps trace issues
98+
- Error state is properly propagated
99+
100+
3. **User Experience**
101+
- Immediate feedback on errors
102+
- Clear what went wrong
103+
- Suggests how to fix issues
104+
105+
## 5. Memory Management
106+
107+
### 5.1 Resource Handling
108+
```c
109+
char *filepath = malloc(512);
110+
if (!filepath) {
111+
log_error("Memory allocation failed");
112+
return NULL;
113+
}
114+
// ... use filepath ...
115+
free(filepath);
116+
```
117+
118+
**Benefits:**
119+
1. **Memory Safety**
120+
- All allocations are checked
121+
- Resources are freed properly
122+
- No memory leaks
123+
124+
2. **Resource Cleanup**
125+
- Systematic approach to resource management
126+
- Files are properly closed
127+
- Memory is properly freed
128+
129+
## 6. Command Processing Pipeline
130+
131+
### 6.1 Step-by-Step Processing
132+
```
133+
Input → Validation → Operation → Logging → Result
134+
```
135+
136+
**Advantages:**
137+
1. **Predictable Flow**
138+
- Clear sequence of operations
139+
- Easy to understand and debug
140+
- Consistent behavior
141+
142+
2. **Validation First**
143+
- Catches errors early
144+
- Prevents invalid operations
145+
- Saves system resources
146+
147+
3. **Automatic Logging**
148+
- Every operation is tracked
149+
- Creates audit trail
150+
- Helps in system monitoring
151+
152+
## 7. Version Control Implementation
153+
154+
### 7.1 Automatic Versioning
155+
```c
156+
// On update, before modifying file:
157+
snprintf(version_path, sizeof(version_path),
158+
"%s/%s_%s_%s",
159+
VERSIONS_DIR, category, timestamp, filename);
160+
```
161+
162+
**Benefits:**
163+
1. **Data Safety**
164+
- Never lose previous versions
165+
- Can recover old content
166+
- Tracks document evolution
167+
168+
2. **Organization**
169+
- Timestamp-based naming
170+
- Category preservation
171+
- Easy to find versions
172+
173+
## 8. Configuration Management
174+
175+
### 8.1 Centralized Constants
176+
```c
177+
#define MAX_INPUT_SIZE 4096
178+
#define DATA_DIR "data"
179+
#define VERSIONS_DIR "data/versions"
180+
```
181+
182+
**Advantages:**
183+
1. **Maintainability**
184+
- Easy to modify system limits
185+
- Consistent values across codebase
186+
- Single source of truth
187+
188+
2. **Flexibility**
189+
- Can change paths easily
190+
- Can adjust size limits
191+
- Easy to configure for different environments
192+
193+
## 9. Build System Design
194+
195+
### 9.1 Makefile Structure
196+
```makefile
197+
CC = gcc
198+
CFLAGS = -Wall -Wextra
199+
SOURCES = $(wildcard src/*.c)
200+
OBJECTS = $(SOURCES:.c=.o)
201+
```
202+
203+
**Benefits:**
204+
1. **Automation**
205+
- One command builds everything
206+
- Handles dependencies automatically
207+
- Only rebuilds what's necessary
208+
209+
2. **Consistency**
210+
- Same flags for all files
211+
- Predictable build process
212+
- Easy to modify build options
213+
214+
## 10. Security Considerations
215+
216+
### 10.1 Input Validation
217+
```c
218+
if (strstr(filename, "..") != NULL) {
219+
log_error("Invalid filename: contains directory traversal");
220+
return false;
221+
}
222+
```
223+
224+
**Why This Matters:**
225+
1. **Security**
226+
- Prevents directory traversal attacks
227+
- Validates input data
228+
- Maintains system integrity
229+
230+
2. **Data Safety**
231+
- Prevents accidental file overwrites
232+
- Maintains data organization
233+
- Protects system files
234+
235+
## 11. Performance Optimizations
236+
237+
### 11.1 Buffer Management
238+
```c
239+
#define BUFFER_SIZE 4096
240+
char buffer[BUFFER_SIZE];
241+
while ((bytes = fread(buffer, 1, BUFFER_SIZE, source)) > 0) {
242+
fwrite(buffer, 1, bytes, dest);
243+
}
244+
```
245+
246+
**Benefits:**
247+
1. **Efficiency**
248+
- Optimal buffer sizes
249+
- Minimizes system calls
250+
- Efficient file operations
251+
252+
2. **Resource Usage**
253+
- Controlled memory usage
254+
- Predictable performance
255+
- Scales well with file size

0 commit comments

Comments
 (0)