Skip to content

Commit 105d339

Browse files
Merge pull request #17 from adityashirsatrao007/feature/subscription-model
feat: design and implement core subscription model
2 parents 6e8e017 + 271e1ae commit 105d339

2 files changed

Lines changed: 69 additions & 1 deletion

File tree

server/.env.example

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# MongoDB
2-
MONGO_URI=
2+
MONGODB_URI=mongodb://localhost:27017/subsentry
33

44
# Server
55
PORT=5000

server/src/models/Subscription.js

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
import mongoose from 'mongoose';
2+
3+
const subscriptionSchema = new mongoose.Schema(
4+
{
5+
name: {
6+
type: String,
7+
required: [true, 'Subscription name is required'],
8+
trim: true,
9+
},
10+
price: {
11+
type: Number,
12+
required: [true, 'Price is required'],
13+
min: [0, 'Price cannot be negative'],
14+
},
15+
currency: {
16+
type: String,
17+
default: 'USD',
18+
uppercase: true,
19+
},
20+
billingCycle: {
21+
type: String,
22+
required: [true, 'Billing cycle is required'],
23+
enum: {
24+
values: ['monthly', 'yearly', 'weekly'],
25+
message: '{VALUE} is not a supported billing cycle',
26+
},
27+
lowercase: true,
28+
},
29+
category: {
30+
type: String,
31+
trim: true,
32+
},
33+
startDate: {
34+
type: Date,
35+
default: Date.now,
36+
},
37+
nextBillingDate: {
38+
type: Date,
39+
},
40+
status: {
41+
type: String,
42+
enum: ['active', 'cancelled', 'paused'],
43+
default: 'active',
44+
lowercase: true,
45+
},
46+
userClerkId: {
47+
type: String,
48+
required: [true, 'User ownership (Clerk ID) is required'],
49+
index: true,
50+
},
51+
source: {
52+
type: String,
53+
enum: ['manual', 'email'],
54+
default: 'manual',
55+
lowercase: true,
56+
},
57+
},
58+
{
59+
timestamps: true,
60+
}
61+
);
62+
63+
// Add index for common queries
64+
subscriptionSchema.index({ userClerkId: 1, status: 1 });
65+
66+
const Subscription = mongoose.model('Subscription', subscriptionSchema);
67+
68+
export default Subscription;

0 commit comments

Comments
 (0)