Skip to content

Commit f42f00c

Browse files
authored
Ft blogger (#145)
* Blogs Creation * Blogs Creation
1 parent e61f6eb commit f42f00c

22 files changed

+1020
-24
lines changed

Diff for: src/index.ts

+42-24
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { ApolloServer } from "apollo-server";
22
import { mergeResolvers, mergeTypeDefs } from "@graphql-tools/merge";
33
import { connect } from "./database/db.config";
4-
import './utils/cronJob';
4+
import "./utils/cronJob";
55
import { typeDefsTrainee } from "./schema/traineeApplicantSchema";
66
import { typeDefsAttribute } from "./schema/traineeAttributeSchema";
77
import { traineeApplicantResolver } from "./resolvers/traineeApplicantResolver";
@@ -30,7 +30,7 @@ import { LoggedUserSchema } from "./schema/loggedUser";
3030
import { loggedUserResolvers } from "./resolvers/loginUserResolver";
3131
import sendBulkyEmailResolver from "./resolvers/bulkyEmailResolver";
3232
import sendBulkyEmailTypeDefs from "./schema/bulkyEmailTypeDefs";
33-
import {roleSchema} from "./schema/roleTypedefs";
33+
import { roleSchema } from "./schema/roleTypedefs";
3434
import { roleResolvers } from "./resolvers/roleResolver";
3535
import { permissionResolvers } from "./resolvers/permissionResolver";
3636
import { permissionSchemaTypeDef } from "./schema/permissionTypeSchema";
@@ -40,44 +40,53 @@ import { formSchema } from "./schema/formSchema";
4040
import { formsResolver } from "./resolvers/forms.resolver";
4141
import { formatError } from "./utils/customErrorHandler";
4242
import { formJobSchema } from "./schema/formJobSchema";
43-
import { jobPostResolver } from "./resolvers/jobPostResolvers"
43+
import { jobPostResolver } from "./resolvers/jobPostResolvers";
4444
import { programTypeDefs } from "./schema/programSchema";
4545
import { programResolvers } from "./resolvers/programResolver";
4646
import { cohortSchema } from "./schema/cohortScheme";
4747
import { cohortResolver } from "./resolvers/cohortResolver";
48-
import { viewOwnApplicationTypeDefs } from "./schema/viewOwnApplication";
48+
import { viewOwnApplicationTypeDefs } from "./schema/viewOwnApplication";
4949
import candidateViewOwnApplication from "./resolvers/viewOwnApplicationResolver";
5050
import { gradingTypeDefs } from "./schema/gradingSchema";
5151
import gradingResolver from "./resolvers/grading";
52-
import {adminViewApplicationsResolvers }from "./resolvers/adminViewApplications";
53-
import { adminViewAllApplicationsTypedefs} from "./schema/adminViewApplicationsSchema";
52+
import { adminViewApplicationsResolvers } from "./resolvers/adminViewApplications";
53+
import { adminViewAllApplicationsTypedefs } from "./schema/adminViewApplicationsSchema";
5454
import { attendanceResolver } from "./resolvers/attendanceResolver";
5555
import { attendanceSchema } from "./schema/attendanceSchema";
5656
import { performanceResolver } from "./resolvers/performanceResolver";
5757
import { performanceSchema } from "./schema/performanceSchema";
58-
import { applicationStageDefs } from './schema/applicationStage';
59-
import { applicationStageResolvers } from './resolvers/applicationStageResolver';
58+
import { applicationStageDefs } from "./schema/applicationStage";
59+
import { applicationStageResolvers } from "./resolvers/applicationStageResolver";
6060
import filterJobResolver from "./resolvers/filterJob";
6161
import filterProgramResolver from "./resolvers/filterPrograms";
6262
import filterRoleResolver from "./resolvers/filterRole";
63-
import applicantNotificationResolver from "./resolvers/applicantNotifications"
64-
import applicantNotifcationsTypedefs from "./schema/applicantNotifications"
63+
import applicantNotificationResolver from "./resolvers/applicantNotifications";
64+
import applicantNotifcationsTypedefs from "./schema/applicantNotifications";
6565
// import {forgetPassword } from "./resolvers/forgetpassword";
66-
import { passwordResolvers } from './resolvers/forgetpassword';
66+
import { passwordResolvers } from "./resolvers/forgetpassword";
6767
import { passwordSchema } from "./schema/forgetpassword";
6868
import { SearchSchema } from "./schema/searchSchema";
6969
import { searchResolver } from "./resolvers/searchResolver";
70-
import {appliedJobResolver} from "./resolvers/appliedJobResolver";
70+
import { appliedJobResolver } from "./resolvers/appliedJobResolver";
7171
import { appliedJobTypeDefs } from "./schema/appliedJobTypeDefs";
7272
import { adminNotificationsResolver } from "./resolvers/adminNotificationsResolver";
73-
import { adminNotificationsSchema } from "./schema/adminNotificationsSchema";import { ticketResolver } from "./resolvers/ticketResolver";
73+
import { adminNotificationsSchema } from "./schema/adminNotificationsSchema";
74+
import { ticketResolver } from "./resolvers/ticketResolver";
7475
import { ticketSchema } from "./schema/ticketSchema";
7576
import filterTicketResolver from "./resolvers/filterTicketResolver";
77+
import { blogResolvers } from "./resolvers/blogResolvers";
78+
import { blogSchema } from "./schema/blogSchema";
79+
import { likeResolvers } from "./resolvers/likeResolvers";
80+
import { likeSchema } from "./schema/likeSchema";
81+
import { commentResolvers } from "./resolvers/commentResolvers";
82+
import { commentSchema } from "./schema/commentSchema";
83+
import { commentReplySchema } from "./schema/commentReplySchema";
84+
import { commentLikeSchema } from "./schema/commentLikeSchema";
85+
import { commentLikeResolvers } from "./resolvers/commentLikeResolvers";
86+
import { commentReplyResolvers } from "./resolvers/commentReplyResolvers";
7687

7788
const PORT = process.env.PORT || 3000;
7889

79-
// const PORT = process.env.PORT || 4001;
80-
8190
const resolvers = mergeResolvers([
8291
applicationCycleResolver,
8392
usersResolvers,
@@ -115,7 +124,12 @@ const resolvers = mergeResolvers([
115124
adminNotificationsResolver,
116125
ticketResolver,
117126
filterTicketResolver,
118-
applicationStageResolvers
127+
applicationStageResolvers,
128+
blogResolvers,
129+
likeResolvers,
130+
commentResolvers,
131+
commentLikeResolvers,
132+
commentReplyResolvers,
119133
]);
120134
const typeDefs = mergeTypeDefs([
121135
applicationCycleTypeDefs,
@@ -151,8 +165,11 @@ const typeDefs = mergeTypeDefs([
151165
applicationStageDefs,
152166
adminNotificationsSchema,
153167
ticketSchema,
154-
applicationStageDefs,
155-
applicationStageDefs
168+
blogSchema,
169+
likeSchema,
170+
commentSchema,
171+
commentReplySchema,
172+
commentLikeSchema,
156173
]);
157174

158175
const server = new ApolloServer({
@@ -163,11 +180,12 @@ const server = new ApolloServer({
163180
let authToken = null;
164181
let currentUser = null;
165182
try {
166-
authToken = req.headers.authorization && req.headers.authorization.startsWith("Bearer ")
167-
? req.headers.authorization.split(" ")[1]
168-
: req.headers.authorization;
183+
authToken =
184+
req.headers.authorization &&
185+
req.headers.authorization.startsWith("Bearer ")
186+
? req.headers.authorization.split(" ")[1]
187+
: req.headers.authorization;
169188
if (authToken) {
170-
171189
currentUser = await findOrCreateUser(authToken);
172190
}
173191
} catch (error) {
@@ -182,5 +200,5 @@ const server = new ApolloServer({
182200

183201
connect().then(() => {
184202
console.log("Database connected!");
185-
server.listen(PORT).then(({ url }) => console.info(`App on ${url}`));
186-
});
203+
server.listen(PORT).then(({ url }) => console.info(`App on ${url}`));
204+
});

Diff for: src/models/CommentReply.ts

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import mongoose, { Schema, model } from "mongoose";
2+
3+
const commentReplySchema = new Schema({
4+
content: {
5+
type: String,
6+
required: true,
7+
},
8+
user: {
9+
type: Schema.Types.ObjectId,
10+
ref: "LoggedUserModel",
11+
required: true,
12+
},
13+
comment: {
14+
type: Schema.Types.ObjectId,
15+
ref: "Comment",
16+
required: true,
17+
},
18+
created_at: {
19+
type: Date,
20+
default: Date.now,
21+
},
22+
});
23+
24+
export const CommentReplyModel = model("CommentReply", commentReplySchema);

Diff for: src/models/blogModel.ts

+56
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
import mongoose, { Schema, model } from "mongoose";
2+
3+
const arrayLimit = (val: string[]) => val.length <= 4;
4+
5+
const blogSchema = new Schema({
6+
title: {
7+
type: String,
8+
required: true,
9+
},
10+
content: {
11+
type: String,
12+
required: true,
13+
},
14+
coverImage: {
15+
type: String,
16+
required: true,
17+
},
18+
images: {
19+
type: [String],
20+
validate: [arrayLimit, "{PATH} exceeds the limit of 4"],
21+
},
22+
likes: [
23+
{
24+
type: Schema.Types.ObjectId,
25+
ref: "Like",
26+
},
27+
],
28+
comments: [
29+
{
30+
type: Schema.Types.ObjectId,
31+
ref: "Comment",
32+
},
33+
],
34+
isHidden: {
35+
type: Boolean,
36+
default: false,
37+
},
38+
author: {
39+
type: Schema.Types.ObjectId,
40+
ref: "LoggedUserModel",
41+
required: true,
42+
},
43+
tags: {
44+
type: [String],
45+
index: true,
46+
},
47+
created_at: {
48+
type: Date,
49+
default: Date.now,
50+
},
51+
updated_at: {
52+
type: Date,
53+
},
54+
});
55+
56+
export const BlogModel = model("Blog", blogSchema);

Diff for: src/models/commentLike.ts

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import mongoose, { Schema, model } from "mongoose";
2+
3+
const commentLikeSchema = new Schema({
4+
user: {
5+
type: Schema.Types.ObjectId,
6+
ref: "LoggedUserModel",
7+
required: true,
8+
},
9+
comment: {
10+
type: Schema.Types.ObjectId,
11+
ref: "Comment",
12+
required: true,
13+
},
14+
created_at: {
15+
type: Date,
16+
default: Date.now,
17+
},
18+
});
19+
20+
export const CommentLikeModel = model("CommentLike", commentLikeSchema);

Diff for: src/models/commentModel.ts

+38
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import mongoose, { Schema, model } from "mongoose";
2+
3+
const commentSchema = new Schema({
4+
content: {
5+
type: String,
6+
required: true,
7+
},
8+
user: {
9+
type: Schema.Types.ObjectId,
10+
ref: "LoggedUserModel",
11+
required: true,
12+
},
13+
blog: {
14+
type: Schema.Types.ObjectId,
15+
ref: "Blog",
16+
required: true,
17+
},
18+
likes: [
19+
{
20+
type: Schema.Types.ObjectId,
21+
ref: "CommentLike",
22+
required: true,
23+
},
24+
],
25+
replies: [
26+
{
27+
type: Schema.Types.ObjectId,
28+
ref: "CommentReplies",
29+
required: true,
30+
},
31+
],
32+
created_at: {
33+
type: Date,
34+
default: Date.now,
35+
},
36+
});
37+
38+
export const CommentModel = model("Comment", commentSchema);

Diff for: src/models/likeModel.ts

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import mongoose, { Schema, model } from "mongoose";
2+
3+
const likeSchema = new Schema({
4+
user: {
5+
type: Schema.Types.ObjectId,
6+
ref: "LoggedUserModel",
7+
required: true,
8+
},
9+
blog: {
10+
type: Schema.Types.ObjectId,
11+
ref: "Blog",
12+
required: true,
13+
},
14+
created_at: {
15+
type: Date,
16+
default: Date.now,
17+
},
18+
});
19+
20+
export const LikeModel = model("Like", likeSchema);

0 commit comments

Comments
 (0)