3.3.10 • Published 5 years ago

@jinyexin/core v3.3.10

Weekly downloads
2
License
MIT
Repository
gitlab
Last release
5 years ago

core

A scalable RESTAPI framework build with the idea of KISS(keep it simple, stupid): With @jinyexin/corecli you can generate following code from database in seconds.

  • RESTAPI: Typescript + express + swagger (Support Mysql and PostgreSQL)

  • Frontend: Angular7+ CoreUI

source code

changelog

See CHANGELOG

Prerequisites:

  • NodeJS >= 8.12

  • npm i -g @jinyexin/corecli

Generate from database

See @jinyexin/corecli

web

cd web

git init

npm i

npm start

##domain

cd domain

git init

npm i

npm start

##Example code

//app.ts
let application = new App(
    {
        appName: "domain",
        controllers: [
            userController,
            ...//all your controller register here
            userDeviceController,
            // optional image upload
            imageController
        ],
        // uncomment following code to enable socket.io
        // gateway: Gateway,
        
        // initialDatabase: true,
        // enableSwagger: true
    }
);

application.init();


//userController.ts
//@CRUDController(User,false) to disable auth check for all method under this controller
@CRUDController(User)
export class userController {

    @Inject()
    repository: userRepository;
    
    @Post({url: '/login', auth: false})
    async login(req, res, next): Promise<any> {
        if (req.body && req.body.username && req.body.password) {
            logger.info("login user:" + req.body.username);
            let result = await serviceFactoryImpl.getInstance().getAuthenticationService().login(req.body.username, req.body.password, this.repository)
            if (result) {
                return result;
            } else {
                throw defaultException.WARNING_authFail;//build in exception
            }
        } else {
            throw new serviceException("user or password missing", 400);//customize exception
        }
    }

    @Get({
            url: '/test/:id',
            callbacks: [async (req, res, next) => {
                let user = await encryption.getAuthentication(req);
                //check if user is admin, you should extract this check to a method for reuse
                if (user.role != 1) {
                    throw new serviceException("only admin could access this api", 403);
                }
                next();
            }]
        })
    async test(req,res,next){
        let result = await this.repository.test(req.params.id);
        return result;
    }
    
    @Post({url: "/pagedsql", auth: false})
    async pagedtest(req, res) {
        return this.repository.pagedTest(req.body as PageInfo);
    }
}


//userRepository.ts
@Repository()
export class userRepository extends baseUserRepository<User> {

    constructor() {
        super(User);
    }

    @SQL("select * from xxx_user where id = ?")
    test(id) {
    }
    
    @PagedSQL("select xxx_user.id as user_id,xxx_user.username,xxx_device.device_id from xxx_user join xxx_device on xxx_user.id = xxx_device.admin_id")
    pagedTest(pageInfo: PageInfo) {
    }

}


//imageController.ts
@FileUploadController({
    baseUrl: "/image",
    uploadFolder: global.config.imagePath,
    nameSingle: "image",
    nameMulti: "images"
})
export class imageController {

}

//Gateway.ts
@WebSocketGateway()
export class Gateway {

    @Inject()
    deviceService: deviceService;

    @SendMessage({interval: 5000, event: "device data"})
    async deviceData() {
        return await this.deviceService.getData();
    }
    
    @SubscribeMessage({event: "test"})
    async test(io: SocketIO.Server, socket: SocketIO.Socket, data: any) {
        //do anything with io and current socket
        logger.warn("get test message:", JSON.stringify(data));
    }

}
3.3.10

5 years ago

3.3.9

5 years ago

3.3.8

5 years ago

3.3.7

5 years ago

3.3.6

5 years ago

3.3.5

5 years ago

3.3.4

5 years ago

3.3.3

5 years ago

3.3.2

5 years ago

3.3.1

5 years ago

3.3.0

5 years ago

3.2.3

5 years ago

3.2.0

5 years ago

3.1.2

5 years ago

3.1.1

5 years ago

3.1.0

5 years ago

3.0.17

5 years ago

3.0.16

5 years ago

3.0.15

5 years ago

3.0.14

5 years ago

3.0.13

5 years ago

3.0.12

5 years ago

3.0.11

5 years ago

3.0.10

5 years ago

3.0.9

5 years ago

3.0.8

5 years ago

2.2.19

5 years ago

2.2.18

5 years ago

3.0.7

5 years ago

3.0.6

5 years ago

3.0.5

5 years ago

3.0.4

5 years ago

3.0.3

5 years ago

3.0.2

5 years ago

3.0.1

5 years ago

3.0.0

6 years ago

2.2.17

6 years ago

2.2.16

6 years ago

2.2.15

6 years ago

2.2.14

6 years ago

2.2.13

6 years ago

2.2.12

6 years ago

2.2.11

6 years ago

2.2.10

6 years ago

2.2.9

6 years ago

2.2.8

6 years ago

2.2.7

6 years ago

2.2.6

6 years ago

2.2.5

6 years ago

2.2.3

6 years ago

2.2.2

6 years ago

2.2.1

6 years ago

2.2.0

6 years ago

2.1.5

6 years ago

2.1.4

6 years ago

2.1.3

6 years ago

2.1.2

6 years ago

2.1.1

6 years ago

2.1.0

6 years ago

2.0.12

6 years ago

2.0.11

6 years ago

2.0.10

6 years ago

2.0.9

6 years ago

2.0.8

6 years ago

2.0.7

6 years ago

2.0.6

6 years ago

2.0.5

6 years ago

2.0.4

6 years ago

2.0.3

6 years ago

2.0.2

6 years ago

2.0.1

6 years ago

2.0.0

6 years ago