// tslint:disable:no-console import * as moment from 'moment'; import * as mongoose from 'mongoose'; import * as redis from 'redis'; import { chevre } from '../../../lib/index'; const project = { id: String(process.env.PROJECT_ID) }; // tslint:disable-next-line:max-func-body-length async function main() { const client = redis.createClient({ host: process.env.REDIS_HOST, port: Number(process.env.REDIS_PORT), password: process.env.REDIS_KEY }); await mongoose.connect(process.env.MONGOLAB_URI, { autoIndex: false }); const offerRepo = new chevre.repository.Offer(mongoose.connection); const offerCatalogRepo = new chevre.repository.OfferCatalog(mongoose.connection); const productRepo = new chevre.repository.Product(mongoose.connection); // const serviceOutputRepo = new chevre.repository.ServiceOutput(mongoose.connection); const projectRepo = new chevre.repository.Project(mongoose.connection); const taskRepo = new chevre.repository.Task(mongoose.connection); const assetTransactionRepo = new chevre.repository.AssetTransaction(mongoose.connection); const placeRepo = new chevre.repository.Place(mongoose.connection); const priceSpecRepo = new chevre.repository.PriceSpecification(mongoose.connection); const reservationRepo = new chevre.repository.Reservation(mongoose.connection); const eventRepo = new chevre.repository.Event(mongoose.connection); const itemAvailabilityRepo = new chevre.repository.itemAvailability.ScreeningEvent(client); const offerRateLimitRepo = new chevre.repository.rateLimit.Offer(client); const identifier = `CIN${(new Date()).valueOf()}`; const transaction = await chevre.service.assetTransaction.reserve.start({ project: { id: project.id, typeOf: chevre.factory.organizationType.Project }, typeOf: chevre.factory.assetTransactionType.Reserve, transactionNumber: identifier, agent: { typeOf: chevre.factory.personType.Person, name: 'サンプル決済者名称', id: '' }, expires: moment() .add(1, 'minute') .toDate(), object: { acceptedOffer: [ { id: '1008', itemOffered: { serviceOutput: { // project: { id: project.id, typeOf: chevre.factory.organizationType.Project }, typeOf: chevre.factory.reservationType.EventReservation, reservedTicket: { typeOf: 'Ticket', ticketedSeat: { typeOf: chevre.factory.placeType.Seat, seatNumber: 'B-2', seatSection: 'Default', seatRow: '' } } // name: 'サンプルメンバーシップ', } } } ], reservationFor: { id: 'ckuz8uj0c' } }, validateAppliesToMovieTicket: true })({ eventAvailability: itemAvailabilityRepo, event: eventRepo, offer: offerRepo, offerCatalog: offerCatalogRepo, offerRateLimit: offerRateLimitRepo, product: productRepo, place: placeRepo, priceSpecification: priceSpecRepo, project: projectRepo, reservation: reservationRepo, // serviceOutput: serviceOutputRepo, task: taskRepo, assetTransaction: assetTransactionRepo }); console.log(transaction); console.log('transaction started'); // await chevre.service.assetTransaction.registerService.confirm({ // id: transaction.id, // endDate: moment('2020-06-10T00:00:00Z') // .toDate() // })({ // assetTransaction: assetTransactionRepo // }); // console.log('transaction confirmed'); // await chevre.service.assetTransaction.registerProgramMembership.cancel({ // object: { // membershipNumber: membershipNumber // } // })({ // transaction: assetTransactionRepo // }); // console.log('transaction canceled'); } main() .then(() => { console.log('success!'); }) .catch(console.error);