2018-03-14 14:12:26 +08:00
// Copyright (C) 2014-2018 Goodrain Co., Ltd.
2017-11-20 17:29:39 +08:00
// RAINBOND, Application Management Platform
2018-03-14 14:33:31 +08:00
2017-11-20 17:29:39 +08:00
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version. For any non-GPL usage of Rainbond,
// one or multiple Commercial Licenses authorized by Goodrain Co., Ltd.
// must be obtained first.
2018-03-14 14:33:31 +08:00
2017-11-20 17:29:39 +08:00
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
2018-03-14 14:33:31 +08:00
2017-11-20 17:29:39 +08:00
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
package dao
import (
2018-04-24 16:44:59 +08:00
"github.com/goodrain/rainbond/db/model"
2017-11-20 17:29:39 +08:00
"fmt"
2018-06-07 16:43:10 +08:00
"time"
2018-11-27 10:15:53 +08:00
"github.com/jinzhu/gorm"
2018-05-28 12:18:29 +08:00
)
2017-11-20 17:29:39 +08:00
2018-05-28 12:18:29 +08:00
//DeleteVersionByEventID DeleteVersionByEventID
func ( c * VersionInfoDaoImpl ) DeleteVersionByEventID ( eventID string ) error {
2017-11-30 11:35:22 +08:00
version := & model . VersionInfo {
2018-05-28 12:18:29 +08:00
EventID : eventID ,
2017-11-30 11:35:22 +08:00
}
if err := c . DB . Where ( "event_id = ? " , eventID ) . Delete ( version ) . Error ; err != nil {
return err
}
return nil
}
2018-05-28 12:18:29 +08:00
//DeleteVersionByServiceID DeleteVersionByServiceID
func ( c * VersionInfoDaoImpl ) DeleteVersionByServiceID ( serviceID string ) error {
var version model . VersionInfo
if err := c . DB . Where ( "service_id = ? " , serviceID ) . Delete ( & version ) . Error ; err != nil {
return err
}
return nil
}
2017-11-30 11:35:22 +08:00
2017-11-20 17:29:39 +08:00
//AddModel AddModel
func ( c * VersionInfoDaoImpl ) AddModel ( mo model . Interface ) error {
2017-11-23 09:57:25 +08:00
result := mo . ( * model . VersionInfo )
var oldResult model . VersionInfo
2018-06-09 18:55:22 +08:00
if ok := c . DB . Where ( "build_version=? and service_id=?" , result . BuildVersion , result . ServiceID ) . Find ( & oldResult ) . RecordNotFound ( ) ; ok {
2017-11-20 17:29:39 +08:00
if err := c . DB . Create ( result ) . Error ; err != nil {
return err
}
return nil
}
2018-06-09 18:55:22 +08:00
return fmt . Errorf ( "service %s build version %s is exist" , result . ServiceID , result . BuildVersion )
2017-11-20 17:29:39 +08:00
}
//UpdateModel UpdateModel
func ( c * VersionInfoDaoImpl ) UpdateModel ( mo model . Interface ) error {
2017-11-23 09:57:25 +08:00
result := mo . ( * model . VersionInfo )
if err := c . DB . Save ( result ) . Error ; err != nil {
return err
}
2017-11-20 17:29:39 +08:00
return nil
}
2018-06-09 18:55:22 +08:00
//VersionInfoDaoImpl VersionInfoDaoImpl
2017-11-20 17:29:39 +08:00
type VersionInfoDaoImpl struct {
DB * gorm . DB
}
2018-06-09 18:55:22 +08:00
//GetVersionByEventID get version by event id
2017-11-20 17:29:39 +08:00
func ( c * VersionInfoDaoImpl ) GetVersionByEventID ( eventID string ) ( * model . VersionInfo , error ) {
var result model . VersionInfo
if err := c . DB . Where ( "event_id=?" , eventID ) . Find ( & result ) . Error ; err != nil {
if err == gorm . ErrRecordNotFound {
//return messageRaw, nil
}
return nil , err
}
return & result , nil
}
2018-06-09 18:55:22 +08:00
//GetVersionByDeployVersion get version by deploy version
2018-05-28 12:18:29 +08:00
func ( c * VersionInfoDaoImpl ) GetVersionByDeployVersion ( version , serviceID string ) ( * model . VersionInfo , error ) {
2017-12-01 14:26:49 +08:00
var result model . VersionInfo
2018-05-28 12:18:29 +08:00
if err := c . DB . Where ( "build_version =? and service_id = ?" , version , serviceID ) . Find ( & result ) . Error ; err != nil {
2017-12-01 14:26:49 +08:00
return nil , err
}
return & result , nil
}
2018-06-09 18:55:22 +08:00
//GetVersionByServiceID get versions by service id
2018-11-27 10:15:53 +08:00
//only return success version info
2017-11-24 11:21:51 +08:00
func ( c * VersionInfoDaoImpl ) GetVersionByServiceID ( serviceID string ) ( [ ] * model . VersionInfo , error ) {
2017-11-20 17:29:39 +08:00
var result [ ] * model . VersionInfo
2018-11-27 10:34:58 +08:00
if err := c . DB . Where ( "service_id=? and final_status=?" , serviceID , "success" ) . Find ( & result ) . Error ; err != nil {
2017-11-20 17:29:39 +08:00
return nil , err
}
return result , nil
}
2018-06-07 16:43:10 +08:00
2019-01-25 14:00:26 +08:00
//GetAllVersionByServiceID get all versions by service id, not only successful
func ( c * VersionInfoDaoImpl ) GetAllVersionByServiceID ( serviceID string ) ( [ ] * model . VersionInfo , error ) {
var result [ ] * model . VersionInfo
if err := c . DB . Where ( "service_id=?" , serviceID ) . Find ( & result ) . Error ; err != nil {
return nil , err
}
return result , nil
}
2018-11-27 10:15:53 +08:00
//GetVersionInfo get version info by service ids
func ( c * VersionInfoDaoImpl ) GetVersionInfo ( timePoint time . Time , serviceIDs [ ] string ) ( [ ] * model . VersionInfo , error ) {
2018-06-08 13:51:56 +08:00
var result [ ] * model . VersionInfo
2018-06-07 17:52:04 +08:00
2018-11-27 10:34:58 +08:00
if err := c . DB . Where ( "service_id in (?) and create_time < ?" , serviceIDs , timePoint ) . Find ( & result ) . Order ( "create_time asc" ) . Error ; err != nil {
2018-06-08 13:51:56 +08:00
return nil , err
2018-06-07 17:52:04 +08:00
}
2018-06-08 13:51:56 +08:00
return result , nil
2018-06-07 16:43:10 +08:00
}
2018-06-08 14:44:27 +08:00
2018-11-27 10:15:53 +08:00
//DeleteVersionInfo delete version
2018-06-08 14:44:27 +08:00
func ( c * VersionInfoDaoImpl ) DeleteVersionInfo ( obj * model . VersionInfo ) error {
if err := c . DB . Delete ( obj ) . Error ; err != nil {
return err
}
2018-11-27 10:15:53 +08:00
return nil
2018-06-08 16:10:28 +08:00
}
2018-06-08 14:44:27 +08:00
2018-11-27 10:15:53 +08:00
//DeleteFailureVersionInfo delete failure version
func ( c * VersionInfoDaoImpl ) DeleteFailureVersionInfo ( timePoint time . Time , status string , serviceIDs [ ] string ) error {
2018-11-27 10:34:58 +08:00
if err := c . DB . Where ( "service_id in (?) and create_time < ? and final_status = ?" , serviceIDs , timePoint , status ) . Delete ( & model . VersionInfo { } ) . Error ; err != nil {
2018-06-08 16:10:28 +08:00
return err
}
return nil
}
2018-11-27 10:15:53 +08:00
//SearchVersionInfo query version count >5
2018-06-08 16:49:49 +08:00
func ( c * VersionInfoDaoImpl ) SearchVersionInfo ( ) ( [ ] * model . VersionInfo , error ) {
var result [ ] * model . VersionInfo
2018-06-08 16:52:19 +08:00
if err := c . DB . Table ( "version_info" ) . Select ( "service_id" ) . Group ( "service_id" ) . Having ( "count(ID) > ?" , 5 ) . Scan ( & result ) . Error ; err != nil {
2018-06-08 17:25:08 +08:00
return nil , err
2018-06-08 16:10:28 +08:00
}
2018-11-27 10:15:53 +08:00
return result , nil
2018-06-08 14:44:27 +08:00
}