> For the complete documentation index, see [llms.txt](https://asamarsal.gitbook.io/notes/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://asamarsal.gitbook.io/notes/personal-documentation/express-js-+-prisma-+-typescript/controller.md).

# Controller

```typescript
import { Request, Response } from "express";
import { PrismaClient } from "../generated/prisma";

const prisma = new PrismaClient();

const testing = async (req: Request, res: Response) => {
    try {
      res.status(200).json({ 
        message: "Server berhasil connect" 
      });
    } catch (error) {
      console.error(error);
      res.status(500).json({ 
        error, 
        message: "Server tidak terhubung" 
      });
    }
  };

const getProducts = async (req: Request, res: Response) => {
    try {
      const products = await prisma.product.findMany();
      // const { sort = 'desc', sortBy = 'price' } = req.query;
        
        // const products = await prisma.product.findMany({
        //     orderBy: {
        //         [(sortBy as string)]: sort === 'desc' ? 'asc' : 'desc'
        //     }
        // });
      res.status(200).json({
        status: "success",
        data: products
      });
    } catch (error) {
      console.error(error);
      res.status(500).json({
        status: "error",
        message: "Internal server error"
      });
    }
  };
  

const createProduct = async (req: Request, res: Response) => {
    try {
      const { name, price, stock } = req.body;
      
      const product = await prisma.product.create({
        data: {
          name,
          price,
          stock
        }
      });
  
      res.status(201).json({
        status: "success",
        data: product
      });
    } catch (error) {
      console.error(error);
      res.status(500).json({
        status: "error", 
        message: "Internal server error"
      });
    }
  };

export {
    testing,
    getProducts,
    createProduct,
};
```
