Skip to content
Permalink
Browse files
first commit
  • Loading branch information
aathish committed Jul 28, 2022
0 parents commit dce9e715b1ff5c4838540f1b760afb60ee0c067b
Show file tree
Hide file tree
Showing 19 changed files with 1,098 additions and 0 deletions.
@@ -0,0 +1,6 @@
# Files and directories created by pub.
.dart_tool/
.packages

# Conventional directory for build output.
build/
@@ -0,0 +1,3 @@
## 1.0.0

- Initial version.
@@ -0,0 +1 @@
A simple command-line application.
@@ -0,0 +1,30 @@
# This file configures the static analysis results for your project (errors,
# warnings, and lints).
#
# This enables the 'recommended' set of lints from `package:lints`.
# This set helps identify many issues that may lead to problems when running
# or consuming Dart code, and enforces writing Dart using a single, idiomatic
# style and format.
#
# If you want a smaller set of lints you can change this to specify
# 'package:lints/core.yaml'. These are just the most critical lints
# (the recommended set includes the core lints).
# The core lints are also what is used by pub.dev for scoring packages.

include: package:lints/recommended.yaml

# Uncomment the following section to specify additional rules.

# linter:
# rules:
# - camel_case_types

# analyzer:
# exclude:
# - path/to/excluded/files/**

# For more information about the core and recommended set of lints, see
# https://dart.dev/go/core-lints

# For additional information about configuring this file, see
# https://dart.dev/guides/language/analysis-options
@@ -0,0 +1,5 @@
class ApiConfigs {
static const String sendGridKey =
'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';
static const String email = "kumarshashi5294@gmail.com";
}
@@ -0,0 +1,137 @@
import 'dart:convert';

import 'package:mongo_dart/mongo_dart.dart';
import 'package:shelf/shelf.dart';

import '../db/mongo_config.dart';

class MortgageController {
final mortgageRef = DBSetup().mortgageRef;
Future<Response> getAllMortgages(
Request request,
) async {
try {
var result = await mortgageRef.find().toList();
var data = [];
for (var element in result) {
var user = element;
user.remove('password');
data.add(user);
}
return Response.ok(
jsonEncode(data),
);
} catch (e) {
return Response.internalServerError(
body: jsonEncode({"message": "$e"}),
);
}
}

Future<Response> getMortgageById(Request request, String mortgageId) async {
try {
var result = await mortgageRef
.findOne({'_id': ObjectId.fromHexString(mortgageId)});
var data = result;
return Response.ok(
jsonEncode(data),
);
} catch (e) {
return Response.internalServerError(
body: jsonEncode({"message": "$e"}),
);
}
}

Future<Response> createMortgage(
Request request,
) async {
try {
var body = await request.readAsString();
var data = jsonDecode(body);
var mortgage = {
'deposit': data['deposit'],
'interest': data['interest'],
'userId': ObjectId.fromHexString(data['userId']),
'tenure': data['tenure'],
'total': data['total'],
'createdAt': DateTime.now().toIso8601String()
};
if (mortgage.values.contains(null)) {
return Response.internalServerError(
body: jsonEncode({"message": "Please fill all the fields"}),
);
}
var result = await mortgageRef.insertOne(mortgage);
return Response.ok(
jsonEncode(result.document),
);
} catch (e) {
return Response.internalServerError(
body: jsonEncode({"message": "$e"}),
);
}
}

Future<Response> updateMortgage(
Request request,
) async {
try {
var body = await request.readAsString();
var data = jsonDecode(body);
var id = data['_id'];
var mortgage = {
'deposit': data['deposit'],
'interest': data['interest'],
'tenure': data['tenure'],
'total': data['total'],
'createdAt': data['createdAt'],
};
if (mortgage.values.contains(null)) {
return Response.internalServerError(
body: jsonEncode({"message": "Please fill all the fields"}),
);
}
var result = await mortgageRef.updateOne(
{'_id': ObjectId.fromHexString(id ?? "")},
{'\$set': mortgage},
);
return Response.ok(
jsonEncode(result.document),
);
} catch (e) {
return Response.internalServerError(
body: jsonEncode({"message": "$e"}),
);
}
}

Future<Response> deleteMortgage(Request request, String mortgageId) async {
try {
var result = await mortgageRef.deleteOne(
{'_id': ObjectId.fromHexString(mortgageId)},
);
return Response.ok(
jsonEncode(result.document),
);
} catch (e) {
return Response.internalServerError(
body: jsonEncode({"message": "$e"}),
);
}
}

Future<Response> getMortgageByUserId(Request request, String userId) async {
try {
var result = await mortgageRef
.find({'userId': ObjectId.fromHexString(userId)}).toList();
return Response.ok(
jsonEncode(result),
);
} catch (e) {
return Response.internalServerError(
body: jsonEncode({"message": "$e"}),
);
}
}
}
@@ -0,0 +1,152 @@
import 'dart:convert';

import 'package:mongo_dart/mongo_dart.dart';
import 'package:shelf/shelf.dart';

import '../db/mongo_config.dart';

class UserController {
var userRef = DBSetup().userRef;
Future<Response> login(Request request) async {
var body = jsonDecode(await request.readAsString());
try {
var result = await DBSetup().userRef.findOne(
{"email": body['email'], 'password': body['password']},
);
if (result != null) {
result.remove('password');
return Response.ok(
jsonEncode(result),
);
} else {
return Response.notFound(
jsonEncode({"message": "No user found"}),
);
}
} catch (e) {
return Response.internalServerError(
body: jsonEncode({"message": "$e"}),
);
}
}

Future<Response> signUp(Request request) async {
try {
var body = jsonDecode(await request.readAsString());
var user = {
"email": body['email'],
"password": body['password'],
"depositSize": body['depositSize'],
"currentRental": body['currentRental'],
"fixedRental": body['fixedRental'],
"amountLeft": body['amountLeft'],
"avgWage": body['avgWage'],
"phoneNumber": body['phoneNumber'],
"username": body['username'],
"borrowAmount": body['borrowAmount'],
'createdAt': DateTime.now().toIso8601String(),
};
if (user.values.contains(null)) {
return Response.badRequest(
body: jsonEncode({"message": "Missing required fields"}),
);
}
var res = await userRef.findOne({'email': user['email']});
if (res != null) {
return Response.badRequest(
body: jsonEncode({"message": "User already exists"}),
);
}
var dbRes = await DBSetup().userRef.insertOne(
user,
);
if (dbRes.hasWriteErrors) {
return Response.internalServerError(
body: jsonEncode({"message": "Users already exists"}),
);
}

return Response.ok(jsonEncode(dbRes.document));
} catch (e) {
return Response.internalServerError(
body: jsonEncode({"message": "$e"}),
);
}
}

Future<Response> getUserDetails(Request request, String userId) async {
try {
var result = await DBSetup()
.userRef
.findOne({"_id": ObjectId.fromHexString(userId)});
if (result != null) {
result.remove('password');
return Response.ok(
jsonEncode(result),
);
} else {
return Response.notFound(
jsonEncode({"message": "No user found"}),
);
}
} catch (e) {
return Response.internalServerError(
body: jsonEncode({"message": "$e"}),
);
}
}

Future<Response> getAllUsers(
Request request,
) async {
try {
var result = await DBSetup().userRef.find().toList();
var data = [];
for (var element in result) {
var user = element;
user.remove('password');
data.add(user);
}
return Response.ok(
jsonEncode(data),
);
} catch (e) {
return Response.internalServerError(
body: jsonEncode({"message": "$e"}),
);
}
}

Future<Response> updateUser(Request request, String userId) async {
try {
var body = jsonDecode(await request.readAsString());
var isUserExists = await DBSetup()
.userRef
.findOne({"_id": ObjectId.fromHexString(userId)});

if (isUserExists != null) {
var newUser = isUserExists;
newUser['username'] = body['username'] ?? isUserExists['username'];
newUser['phonenumber'] = body['phonenumber']?.toString() ??
isUserExists['phonenumber']?.toString();
print("New user will be :$newUser");
var res = await DBSetup().userRef.updateOne(
{"_id": ObjectId.fromHexString(userId)},
{'\$set': body},
);
print(
"Write errors:${res.writeError},document:${res.document},id:$userId");
return Response.ok(
jsonEncode({"message": "Updated user successfully"}));
} else {
return Response.notFound(
jsonEncode({"message": "No user found"}),
);
}
} catch (e) {
return Response.internalServerError(
body: jsonEncode({"message": "$e"}),
);
}
}
}
@@ -0,0 +1,22 @@
import 'package:mongo_dart/mongo_dart.dart';

class DBSetup {
DbCollection userRef = db.collection('users');
DbCollection mortgageRef = db.collection('mortgage');

static late Db db;

static const String mongoUrl =
'mongodb+srv://shashiben:Shashiben7@cluster0.qrn8lm6.mongodb.net/mortgage?retryWrites=true&w=majority';
static init() async {
try {
db = await Db.create(mongoUrl);
await db.open();
print("Mongo is connected");
} on MongoDartError catch (e) {
print('Mongo Exception: ${e.message}');
} catch (e) {
print("Exception: $e");
}
}
}
@@ -0,0 +1,14 @@
import 'package:shelf/shelf.dart';
import 'package:shelf_router/shelf_router.dart';

import 'mortgage.routes.dart';
import 'user.routes.dart';

class InitRoute {
Handler get handler {
var router = Router();
router.mount('/user', UserRoutes().handler);
router.mount('/mortgage', MortgagegRoutes().handler);
return router;
}
}
@@ -0,0 +1,19 @@
import 'package:shelf/shelf.dart';
import 'package:shelf_router/shelf_router.dart';

import '../controllers/mortgage.controller.dart';

class MortgagegRoutes {
Handler get handler {
final MortgageController _mortgageController = MortgageController();

var router = Router();
router.get('/', _mortgageController.getAllMortgages);
router.get('/<mortgageId>', _mortgageController.getMortgageById);
router.post('/', _mortgageController.createMortgage);
router.put('/', _mortgageController.updateMortgage);
router.delete('/<mortgageId>', _mortgageController.deleteMortgage);
router.get('/user/<userId>', _mortgageController.getMortgageByUserId);
return router;
}
}

0 comments on commit dce9e71

Please sign in to comment.