-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathdata.ts
More file actions
226 lines (209 loc) · 7.19 KB
/
Copy pathdata.ts
File metadata and controls
226 lines (209 loc) · 7.19 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
// Fake data generator that mimics JSONPlaceholder
// Generates users, posts, comments, albums, photos, and todos with proper relationships
export interface User {
id: number;
name: string;
username: string;
email: string;
address: {
street: string;
suite: string;
city: string;
zipcode: string;
geo: {
lat: string;
lng: string;
};
};
phone: string;
website: string;
company: {
name: string;
catchPhrase: string;
bs: string;
};
}
export interface Post {
userId: number;
id: number;
title: string;
body: string;
}
export interface Comment {
postId: number;
id: number;
name: string;
email: string;
body: string;
}
export interface Album {
userId: number;
id: number;
title: string;
}
export interface Photo {
albumId: number;
id: number;
title: string;
url: string;
thumbnailUrl: string;
}
export interface Todo {
userId: number;
id: number;
title: string;
completed: boolean;
}
// Sample data arrays
const firstNames = ['Leanne', 'Ervin', 'Clementine', 'Patricia', 'Chelsey', 'Mrs. Dennis', 'Kurtis', 'Nicholas', 'Glenna', 'Clementina'];
const lastNames = ['Graham', 'Howell', 'Bauch', 'Lebsack', 'Dietrich', 'Schulist', 'Weissnat', 'Runolfsdottir', 'Reichert', 'DuBuque'];
const usernames = ['Bret', 'Antonette', 'Samantha', 'Karianne', 'Kamren', 'Leopoldo_Corkery', 'Elwyn.Skiles', 'Maxime_Nienow', 'Delphine', 'Moriah.Stanton'];
const cities = ['Gwenborough', 'Wisokyburgh', 'McKenziehaven', 'South Elvis', 'Roscoeview', 'South Christy', 'Howemouth', 'Aliyaview', 'Bartholomebury', 'Lebsackbury'];
const companies = ['Romaguera-Crona', 'Deckow-Crist', 'Romaguera-Jacobson', 'Robel-Corkery', 'Keebler LLC', 'Considine-Lockman', 'Johns Group', 'Abernathy Group', 'Yost and Sons', 'Hoeger LLC'];
const streets = ['Kulas Light', 'Victor Plains', 'Douglas Extension', 'Hoeger Mall', 'Skiles Walks', 'Norberto Crossing', 'Rex Trail', 'Ellsworth Summit', 'Dayna Park', 'Kattie Turnpike'];
const postTitles = [
'sunt aut facere repellat provident occaecati excepturi optio reprehenderit',
'qui est esse',
'ea molestias quasi exercitationem repellat qui ipsa sit aut',
'eum et est occaecati',
'nesciunt quas odio',
'dolorem eum magni eos aperiam quia',
'magnam facilis autem',
'dolorem dolore est ipsam',
'nesciunt iure omnis dolorem tempora et accusantium',
'optio molestias id quia eum'
];
const photoTitles = [
'accusamus beatae ad facilis cum similique qui sunt',
'reprehenderit est deserunt velit ipsam',
'officia porro iure quia iusto qui ipsa ut modi',
'culpa odio esse rerum omnis laboriosam voluptate repudiandae',
'natus nisi omnis corporis facere molestiae rerum in',
'accusamus ea aliquid et amet sequi nemo',
'officia delectus consequatur vero aut veniam explicabo molestias',
'aut porro officiis laborum odit ea laudantium corporis',
'qui eius qui autem sed',
'beatae et provident et ut vel'
];
// Generate Users (10 users like JSONPlaceholder)
export function generateUsers(): User[] {
return Array.from({ length: 10 }, (_, i) => ({
id: i + 1,
name: `${firstNames[i]} ${lastNames[i]}`,
username: usernames[i],
email: `${usernames[i].toLowerCase()}@${companies[i].split(' ')[0].toLowerCase()}.com`,
address: {
street: streets[i],
suite: `Apt. ${Math.floor(Math.random() * 999)}`,
city: cities[i],
zipcode: `${Math.floor(Math.random() * 90000) + 10000}-${Math.floor(Math.random() * 9000) + 1000}`,
geo: {
lat: (Math.random() * 180 - 90).toFixed(4),
lng: (Math.random() * 360 - 180).toFixed(4)
}
},
phone: `1-${Math.floor(Math.random() * 900) + 100}-${Math.floor(Math.random() * 900) + 100}-${Math.floor(Math.random() * 9000) + 1000}`,
website: `${usernames[i].toLowerCase()}.org`,
company: {
name: companies[i],
catchPhrase: 'Multi-layered client-server neural-net',
bs: 'harness real-time e-markets'
}
}));
}
// Generate Posts (100 posts, 10 per user)
export function generatePosts(): Post[] {
const posts: Post[] = [];
for (let userId = 1; userId <= 10; userId++) {
for (let postNum = 0; postNum < 10; postNum++) {
posts.push({
userId,
id: (userId - 1) * 10 + postNum + 1,
title: postTitles[postNum] || `Post title ${postNum + 1}`,
body: `quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto`
});
}
}
return posts;
}
// Generate Comments (500 comments, 5 per post)
export function generateComments(): Comment[] {
const comments: Comment[] = [];
for (let postId = 1; postId <= 100; postId++) {
for (let commentNum = 0; commentNum < 5; commentNum++) {
comments.push({
postId,
id: (postId - 1) * 5 + commentNum + 1,
name: `id labore ex et quam laborum`,
email: `Eliseo@gardner.biz`,
body: `laudantium enim quasi est quidem magnam voluptate ipsam eos\ntempora quo necessitatibus\ndolor quam autem quasi\nreiciendis et nam sapiente accusantium`
});
}
}
return comments;
}
// Generate Albums (100 albums, 10 per user)
export function generateAlbums(): Album[] {
const albums: Album[] = [];
for (let userId = 1; userId <= 10; userId++) {
for (let albumNum = 0; albumNum < 10; albumNum++) {
albums.push({
userId,
id: (userId - 1) * 10 + albumNum + 1,
title: `quidem molestiae enim`
});
}
}
return albums;
}
// Generate Photos (5000 photos, 50 per album)
export function generatePhotos(): Photo[] {
const photos: Photo[] = [];
for (let albumId = 1; albumId <= 100; albumId++) {
for (let photoNum = 0; photoNum < 50; photoNum++) {
const photoId = (albumId - 1) * 50 + photoNum + 1;
photos.push({
albumId,
id: photoId,
title: photoTitles[photoNum % 10] || `Photo title ${photoNum + 1}`,
url: `https://via.placeholder.com/600/${Math.floor(Math.random() * 16777215).toString(16)}`,
thumbnailUrl: `https://via.placeholder.com/150/${Math.floor(Math.random() * 16777215).toString(16)}`
});
}
}
return photos;
}
// Generate Todos (200 todos, 20 per user)
export function generateTodos(): Todo[] {
const todos: Todo[] = [];
const todoTitles = [
'delectus aut autem',
'quis ut nam facilis et officia qui',
'fugiat veniam minus',
'et porro tempora',
'laboriosam mollitia et enim quasi adipisci quia provident illum',
'qui ullam ratione quibusdam voluptatem quia omnis',
'illo expedita consequatur quia in',
'quo adipisci enim quam ut ab',
'molestiae perspiciatis ipsa',
'illo est ratione doloremque quia maiores aut'
];
for (let userId = 1; userId <= 10; userId++) {
for (let todoNum = 0; todoNum < 20; todoNum++) {
todos.push({
userId,
id: (userId - 1) * 20 + todoNum + 1,
title: todoTitles[todoNum % 10],
completed: Math.random() > 0.5
});
}
}
return todos;
}
// Initialize all data
export const users = generateUsers();
export const posts = generatePosts();
export const comments = generateComments();
export const albums = generateAlbums();
export const photos = generatePhotos();
export const todos = generateTodos();