Day16-蜗牛影城后端开发

蜗牛影城后端开发

一 多表关联查询

电影集合movie的type(类别)字段关联到电影类别movieType表的_id(主键)

image-20230614093938034

image-20230614100619208

二 蜗牛影城后端开发

image-20230614110635868

1 数据的导入导出

2 用户模块

UserModel.js

//导入mongoose,并解构出Schema(类)和model(对象)
const {Schema,model} = require("mongoose")

/**
 * 创建Schema对象,该对象跟表的解构对应
 */
const userSchema = new Schema({
    icon:String,
    username:String,
    password:String
},({versionKey:false}))

/**
 * 暴露model对象
 * 参数一 模型名称 参数二 Schema对象 参数三 表的名称
 */
module.exports = model("UserModel",userSchema,"userinfo")

UserController.js

//导入UserModel
const userModel = require("../model/UserModel")

/**
 * 编写一个类
 */
class UserController{
    /**
     * 登录
     * request
     * response
     */
    async login(req,res){
        //获取前端请求的数据
        const {username,password} = req.body
        //查询数据库,结果是数组
        const result = await userModel.find({username,password})
        if(result.length > 0){
            const {_id,icon,username} = result[0]
            const user = {_id,icon,username}
            res.send({code:200,msg:"登录成功",data:user})
        }else{
            res.send({code:500,msg:"账号或密码错误"})
        }
    }

    /**
     * 注册
     */
    async register(req,res){
        //获取前端请求的数据
        const {username,password} = req.body
        //判断账号是否存在
        const r1 = await userModel.find({username})
        if(r1.length > 0){
            res.send({code:500,msg:"账号已存在,注册失败"})
            return
        }
        //开始注册
        await userModel.create({
            username,
            password
        })
        res.send({code:200,msg:"注册成功"})
    }

    /**
     * 忘记密码,重置密码
     */
    async resetPassword(req,res){
        const {username,newPassword} = req.body
        const result =  await userModel.updateOne({username},{password:newPassword})
        if(result.modifiedCount == 1){
            res.send({code:200,msg:"密码重置成功"})
        }else{
            res.send({code:500,msg:"密码重置失败"})
        }
    }

}

module.exports = new UserController()

users.js

var express = require('express');
var router = express.Router();

//导入UserController
const userController =  require("../controller/UserController")

router.post("/login",userController.login)

router.post("/register",userController.register)

router.post("/resetPassword",userController.resetPassword)

module.exports = router;

3 电影模块-关联查询

(1)电影表通过movieType2关联到电影类别表的_id

image-20230213105730986

(2)在model中进行外键关联

image-20230614163402063

image-20230614163622000

关联的TypesModel文件一定要加载一次。

我们在MovieController中加载

(3)关联查询

const data = await MoviesModel_DB.find().populate("movieType2")
//导入模型层对象
const { default: mongoose } = require("mongoose");
const movieModel =  require("../model/MovieModel")

//引入TypesModel
const typesModel = require("../model/TypesModel")


class MovieController{

    /**
     * 查询电影列表
     */
    async findList(req,res){
        const result = await movieModel.find()
        res.send({code:200,msg:"查询成功",data:result})
    }


    /**
     * 根据id查询
     */
    async findById(req,res){
        const {_id} = req.query
        const result = await movieModel.find({_id}).populate("movieType2")
        console.log(result);
        const movie = result[0]
        res.send({code:200,msg:"查询成功",data:movie})
    }
}

module.exports =  new MovieController()

4 影院模块

OpearModel.js

const {Schema,model} = require("mongoose")

const opearSchema = new Schema({
    address:String,
    img_src:String,
    movies:String,
    name:String,
    phone:String
},({versionKey:false}))

module.exports = model("OpearModel",opearSchema,"opear")

OpearController.js

const opearModel = require("../model/OpearModel")

class OpearController{

    /**
     * 查询所有的影院
     * @param {} req 
     * @param {*} res 
     */
    async findList(req, res){
        let result = await opearModel.find()
        console.log(result);
        res.send({code:200,msg:"查询成功",data:result})
    }


    async findById(req, res){
        const {_id} = req.query
        let result = await opearModel.find({_id})
        res.send({code:200,msg:"查询成功",data:result[0]})
    }

}

module.exports = new OpearController()

opear.js

var express = require('express');
var router = express.Router();

//导入MovieController
const opearController =  require("../controller/OpearController")

router.get("/findList",opearController.findList)

router.get("/findById",opearController.findById)


module.exports = router;

5订单模块

OrdersModel.js

const {Schema,model} = require("mongoose")

const orderSchema = new Schema({
    code:String,
    movieId:{
        type:String,
        ref:"MovieModel"
    },
    opearId:{
        type:String,
        ref:"OpearModel"
    },
    orderNo:String,
    seats:String,
    state:String,
    time:String,
    userId:{
        type:String,
        ref:"UserModel"
    }
},({versionKey:false}))

module.exports = model("OrdersModel",orderSchema,"orders")

OrderController.js

const orderModel = require("../model/OrdersModel")
const movieModel = require("../model/MovieModel")
const opearModel = require("../model/OpearModel")
const userModel = require("../model/UserModel")


class OrderController{
    /**
     * 创建订单
     */
    async createOrder(req,res){
        const {movieId,opearId,seats,userId} = req.body
        const code = Math.floor(Math.random()*900000+100000)//兑换码
        const orderNo = new Date().getTime()
        const time = new Date().toLocaleString()
        await orderModel.create({
            code,
            movieId,
            opearId,
            orderNo,
            seats,
            state:1,
            time,
            userId
        })
        res.send({code:200,msg:"订单创建成功"})
    }

    /**
     * 根据用户的id查询订单列表
     */
    async findOrderByStateAnduserId(req,res){
        const {userId,state} = req.query
        let result
        if(state){//查询待使用的电影票
             result = await orderModel.find({userId,state}).populate("movieId").populate("opearId").populate("userId")
        }else{//查询所有订单
             result = await orderModel.find({userId}).populate("movieId").populate("opearId").populate("userId")
        }
        res.send({code:200,msg:"查询订单成功",data:result})  
    }

    /**
     * 根据订单id查询订单详情
     */
    async findById(req,res){
        const {_id} = req.query
        const result = await orderModel.find({_id}).populate("movieId").populate("opearId").populate("userId")
        res.send({code:200,msg:"根据id查询订单成功",data:result[0]})  
    }
}

module.exports = new OrderController()

order.js

var express = require('express');
var router = express.Router();

const orderController = require("../controller/OrderController")

router.post("/createOrder",orderController.createOrder)

router.get("/findOrderList",orderController.findOrderByStateAnduserId)

router.get("/findById",orderController.findById)

module.exports = router;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值