Files
speckle-server/packages/server/modules/core/services/branches.js
T
2021-01-03 13:35:53 +02:00

71 lines
2.3 KiB
JavaScript

'use strict'
const bcrypt = require( 'bcrypt' )
const crs = require( 'crypto-random-string' )
const appRoot = require( 'app-root-path' )
const knex = require( `${appRoot}/db/knex` )
const Streams = ( ) => knex( 'streams' )
const Branches = ( ) => knex( 'branches' )
const BranchCommits = ( ) => knex( 'branch_commits' )
module.exports = {
async createBranch( { name, description, streamId, authorId } ) {
let branch = {}
branch.id = crs( { length: 10 } )
branch.streamId = streamId
branch.authorId = authorId
branch.name = name.toLowerCase( )
branch.description = description
let [ id ] = await Branches( ).returning( 'id' ).insert( branch )
// update stream updated at
await Streams().where( { id: streamId } ).update( { updatedAt: knex.fn.now() } )
return branch.id
},
async updateBranch( { id, name, description } ) {
return await Branches( ).where( { id: id } ).update( { name: name, description: description } )
},
async getBranchById( { id } ) {
return await Branches( ).where( { id: id } ).first( ).select( '*' )
},
async getBranchesByStreamId( { streamId, limit, cursor } ) {
limit = limit || 25
let query = Branches( ).select( '*' ).where( { streamId: streamId } )
if ( cursor )
query.andWhere( 'updatedAt', '<', cursor )
query.orderBy( 'updatedAt', 'desc' ).limit( limit )
let totalCount = await module.exports.getBranchesByStreamIdTotalCount( { streamId } )
let rows = await query
return { items: rows, cursor: rows.length > 0 ? rows[ rows.length - 1 ].updatedAt.toISOString( ) : null, totalCount }
},
async getBranchesByStreamIdTotalCount( { streamId } ) {
let [ res ] = await Branches( ).count( ).where( { streamId: streamId } )
return parseInt( res.count )
},
async getBranchByNameAndStreamId( { streamId, name } ) {
let query = Branches( ).select( '*' ).where( { streamId: streamId } ).andWhere( { name: name } ).first( )
return await query
},
async deleteBranchById( { id, streamId } ) {
let branch = await module.exports.getBranchById( { id: id } )
if ( branch.name === 'main' )
throw new Error( 'Cannot delete the main branch.' )
await Branches( ).where( { id: id } ).del( )
await Streams().where( { id: streamId } ).update( { updatedAt: knex.fn.now() } )
return true
},
}