yarn seed를 통해 더미데이터를 생성하려 했으나 "seeder is not a constructor" 라는 에러에 마주칩니다. 어느 부분이 잘못됫는지 알아보기 위해 에러코드를 살펴봤으나 제 코드 부분이 아닌 typeorm-extension 부분에서 에러가 나는것 같아 해결하기 어렵습니다. TypeError: seeder is not a constructor at /Users/jinyoung/Desktop/try-own-version/practice-version/node_modules/typeorm-extension/src/seeder/module.ts:122:19 at Generator.next (<anonymous>) at fulfilled (/Users/jinyoung/Desktop/try-own-version/practice-version/node_modules/typeorm-extension/dist/seeder/module.js:5:58) dataSource.ts import dotenv from 'dotenv'; //dataSource에 entity를 입력해줄때는 절대경로면 못찾아온다. 그래서 상대 경로로 써줘야함 import { User } from './src/users/entities/user.entity'; import { DataSource } from 'typeorm'; const mode = process.env.NODE_ENV || 'development'; dotenv.config({ path: process.cwd() + `/.env.${mode}` }); const dataSource = new DataSource({ type: 'mysql', host: 'localhost', port: 3306, database: process.env.DB_DATABASE, username: process.env.DB_USERNAME, password: process.env.DB_PASSWORD, charset: 'utf8mb4_general_ci', entities: [User], migrations: [__dirname + '/src/migrations/*.ts'], synchronize: true, logging: true, }); export default dataSource; package.json seed부분 설정 "seed": "ts-node ./node_modules/typeorm-extension/dist/cli/index.js seed -d ./dataSource.ts" database/seeds/create-initial-data.ts import { User } from '../../users/entities/user.entity'; import { DataSource } from 'typeorm'; import { Seeder, SeederFactoryManager } from 'typeorm-extension'; export class UserSeeder implements Seeder { async run( dataSource: DataSource, factoryManager: SeederFactoryManager, ): Promise<any> { const userRepository = dataSource.getRepository(User); await userRepository.save({ email: 'ggg@gmail.com', firstName: 'sfvs', lastName: 'wdwdwd', nickname: 'hihi', }); } } typeorm-extension 버젼 "typeorm-extension": "^2.4.2", "typeorm": "^0.3.12", 시도해본 내용 1. dataSource 생성시 new DataSource({ ... 중략 seed:["create-initial-data.ts 경로"] 추가 }) 2. db 삭제후 다시 생성(생성시 테이블 싱크까지 맞춘후 seed 시도) 3. typeorm-extension 버전 문제일까 해서 다운그레이드 시도 4. typeorm 0.3대는 유지하고 0.3.11, 0.3.10등 다른 버전으로 시도 결과 모두 실패
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 아니오 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 제가 DI를 제대로 이해한 것인지 확인 부탁드려도 될까요? MemberService클래스와 MemberServiceTest클래스의 멤버변수인 MemoryMemberRepository 객체가 다른 객체일 가능성이 있습니다. 각각의 두 클래스에서 굳이 동일한(총 2개) MemoryMemberRepository객체를 만들 필요는 없습니다. 왜냐하면 두 객체가 다른 객체일 가능성도 있고 목적상 다른 객체이어야 할 이유가 전혀 없기 때문입니다. 이러한 문제를 개선하기 위해 DI가 필요합니다. DI를 하는 방법은 다음과 같습니다. MemberService클래스 에서 멤버변수에MemoryMemberRepository 객체를 생성하지 않고 참조변수만을 선언합니다. 생성자를 만들어 MemoryMemberRepository 객체를 주입받고 그 객체를 멤버변수 MemoryMemberRepository로서 사용하도록 합니다. MemberServiceTest클래스 에서 MemberService 생성자를 사용하여 MemberService 객체를 생성하는데 이 때, 생성자의 인자에 MemoryMemberRepository 객체를 생성해 주입합니다. MemberService클래스에서 생성자를 만들었고 생성자의 인자로 MemoryMemberRepository 객체를 주입받고 그 객체를 멤버변수로 사용하기로 했다는 것을 잊지말아야 합니다. 이것이 핵심입니다. 물론 14분대 강의영상에서는 MemberServiceTest클래스에서 MemberService의 각 메서드들이 테스트되기 전 매번 MemberService 객체가 만들어져야 하므로 beforeEach() 메서드 안에서 구현이 되었을 뿐, DI의 원리는 지금까지 설명한 바와 동일합니다.
강의를 보면서 왜 갑자기 count 1이 2가 되지 했는데 hanoi 함수가 스택에 쌓이면서 count가 2이었던 함수 3이었던 함수가 끝이 안났기 때문에 계속 count가 올라갔던거군요. 이거 때문에 분명 count 1인 상태로 함수가 끝났는데 갑자기 2이었던 함수가 왜 시작되는지 의아했습니다. 동영상 5번 반복적으로 보니깐 이제야 이해되네요! 감사합니다!
➜ vue-til-server git:(master) ✗ npm i bcrypt npm WARN deprecated bcrypt@3.0.8: versions < v5.0.0 do not handle NUL in passwords properly npm WARN deprecated node-pre-gyp@0.14.0: Please upgrade to @mapbox/node-pre-gyp: the non-scoped node-pre-gyp package is deprecated and only the @mapbox scoped package will recieve updates in the future npm ERR! code 1 npm ERR! path /Users/seungwonjang/Desktop/VUE-ENDGAME/vue-til-server/node_modules/bcrypt npm ERR! command failed npm ERR! command sh -c node-pre-gyp install --fallback-to-build npm ERR! CXX(target) Release/obj.target/bcrypt_lib/src/blowfish.o npm ERR! CXX(target) Release/obj.target/bcrypt_lib/src/bcrypt.o npm ERR! CXX(target) Release/obj.target/bcrypt_lib/src/bcrypt_node.o npm ERR! Failed to execute '/opt/homebrew/Cellar/node/19.6.0/bin/node /opt/homebrew/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js build --fallback-to-build --module=/Users/seungwonjang/Desktop/VUE-ENDGAME/vue-til-server/node_modules/bcrypt/lib/binding/bcrypt_lib.node --module_name=bcrypt_lib --module_path=/Users/seungwonjang/Desktop/VUE-ENDGAME/vue-til-server/node_modules/bcrypt/lib/binding --napi_version=8 --node_abi_napi=napi --napi_build_version=0 --node_napi_label=node-v111' (1) npm ERR! node-pre-gyp info it worked if it ends with ok npm ERR! node-pre-gyp info using node-pre-gyp@0.14.0 npm ERR! node-pre-gyp info using node@19.6.0 | darwin | arm64 npm ERR! node-pre-gyp WARN Using needle for node-pre-gyp https download npm ERR! node-pre-gyp info check checked for "/Users/seungwonjang/Desktop/VUE-ENDGAME/vue-til-server/node_modules/bcrypt/lib/binding/bcrypt_lib.node" (not found) npm ERR! node-pre-gyp http GET https://github.com/kelektiv/node.bcrypt.js/releases/download/v3.0.8/bcrypt_lib-v3.0.8-node-v111-darwin-arm64-unknown.tar.gz npm ERR! node-pre-gyp http 404 https://github.com/kelektiv/node.bcrypt.js/releases/download/v3.0.8/bcrypt_lib-v3.0.8-node-v111-darwin-arm64-unknown.tar.gz npm ERR! node-pre-gyp WARN Tried to download(404): https://github.com/kelektiv/node.bcrypt.js/releases/download/v3.0.8/bcrypt_lib-v3.0.8-node-v111-darwin-arm64-unknown.tar.gz npm ERR! node-pre-gyp WARN Pre-built binaries not found for bcrypt@3.0.8 and node@19.6.0 (node-v111 ABI, unknown) (falling back to source compile with node-gyp) npm ERR! node-pre-gyp http 404 status code downloading tarball https://github.com/kelektiv/node.bcrypt.js/releases/download/v3.0.8/bcrypt_lib-v3.0.8-node-v111-darwin-arm64-unknown.tar.gz npm ERR! gyp info it worked if it ends with ok npm ERR! gyp info using node-gyp@9.3.0 npm ERR! gyp info using node@19.6.0 | darwin | arm64 npm ERR! gyp info ok npm ERR! gyp info it worked if it ends with ok npm ERR! gyp info using node-gyp@9.3.0 npm ERR! gyp info using node@19.6.0 | darwin | arm64 npm ERR! gyp info find Python using Python version 3.10.10 found at "/opt/homebrew/opt/python@3.10/bin/python3.10" npm ERR! gyp info spawn /opt/homebrew/opt/python@3.10/bin/python3.10 npm ERR! gyp info spawn args [ npm ERR! gyp info spawn args '/opt/homebrew/lib/node_modules/npm/node_modules/node-gyp/gyp/gyp_main.py', npm ERR! gyp info spawn args 'binding.gyp', npm ERR! gyp info spawn args '-f', npm ERR! gyp info spawn args 'make', npm ERR! gyp info spawn args '-I', npm ERR! gyp info spawn args '/Users/seungwonjang/Desktop/VUE-ENDGAME/vue-til-server/node_modules/bcrypt/build/config.gypi', npm ERR! gyp info spawn args '-I', npm ERR! gyp info spawn args '/opt/homebrew/lib/node_modules/npm/node_modules/node-gyp/addon.gypi', npm ERR! gyp info spawn args '-I', npm ERR! gyp info spawn args '/Users/seungwonjang/Library/Caches/node-gyp/19.6.0/include/node/common.gypi', npm ERR! gyp info spawn args '-Dlibrary=shared_library', npm ERR! gyp info spawn args '-Dvisibility=default', npm ERR! gyp info spawn args '-Dnode_root_dir=/Users/seungwonjang/Library/Caches/node-gyp/19.6.0', npm ERR! gyp info spawn args '-Dnode_gyp_dir=/opt/homebrew/lib/node_modules/npm/node_modules/node-gyp', npm ERR! gyp info spawn args '-Dnode_lib_file=/Users/seungwonjang/Library/Caches/node-gyp/19.6.0/<(target_arch)/node.lib', npm ERR! gyp info spawn args '-Dmodule_root_dir=/Users/seungwonjang/Desktop/VUE-ENDGAME/vue-til-server/node_modules/bcrypt', npm ERR! gyp info spawn args '-Dnode_engine=v8', npm ERR! gyp info spawn args '--depth=.', npm ERR! gyp info spawn args '--no-parallel', npm ERR! gyp info spawn args '--generator-output', npm ERR! gyp info spawn args 'build', npm ERR! gyp info spawn args '-Goutput_dir=.' npm ERR! gyp info spawn args ] npm ERR! gyp info ok npm ERR! gyp info it worked if it ends with ok npm ERR! gyp info using node-gyp@9.3.0 npm ERR! gyp info using node@19.6.0 | darwin | arm64 npm ERR! gyp info spawn make npm ERR! gyp info spawn args [ 'BUILDTYPE=Release', '-C', 'build' ] npm ERR! In file included from ../src/bcrypt_node.cc:1: npm ERR! In file included from ../../nan/nan.h:174: npm ERR! ../../nan/nan_callbacks.h:55:23: error: no member named 'AccessorSignature' in namespace 'v8' npm ERR! typedef v8::Local<v8::AccessorSignature> Sig; npm ERR! ~~~~^ npm ERR! In file included from ../src/bcrypt_node.cc:1: npm ERR! ../../nan/nan.h:2536:8: error: no matching member function for call to 'SetAccessor' npm ERR! tpl->SetAccessor( npm ERR! ~~~~~^~~~~~~~~~~ npm ERR! /Users/seungwonjang/Library/Caches/node-gyp/19.6.0/include/node/v8-template.h:814:8: note: candidate function not viable: no known conversion from 'imp::Sig' (aka 'int') to 'v8::SideEffectType' for 7th argument npm ERR! void SetAccessor( npm ERR! ^ npm ERR! /Users/seungwonjang/Library/Caches/node-gyp/19.6.0/include/node/v8-template.h:807:8: note: candidate function not viable: no known conversion from 'imp::NativeGetter' (aka 'void (*)(v8::Local<v8::Name>, const v8::PropertyCallbackInfo<v8::Value> &)') to 'v8::AccessorGetterCallback' (aka 'void (*)(Local<v8::String>, const PropertyCallbackInfo<v8::Value> &)') for 2nd argument npm ERR! void SetAccessor( npm ERR! ^ npm ERR! In file included from ../src/bcrypt_node.cc:1: npm ERR! In file included from ../../nan/nan.h:2884: npm ERR! ../../nan/nan_typedarray_contents.h:34:43: error: no member named 'GetContents' in 'v8::ArrayBuffer' npm ERR! data = static_cast<char*>(buffer->GetContents().Data()) + byte_offset; npm ERR! ~~~~~~~~^ npm ERR! 3 errors generated. npm ERR! make: *** [Release/obj.target/bcrypt_lib/src/bcrypt_node.o] Error 1 npm ERR! gyp ERR! build error npm ERR! gyp ERR! stack Error: make failed with exit code: 2 npm ERR! gyp ERR! stack at ChildProcess.onExit (/opt/homebrew/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:203:23) npm ERR! gyp ERR! stack at ChildProcess.emit (node:events:512:28) npm ERR! gyp ERR! stack at ChildProcess._handle.onexit (node:internal/child_process:293:12) npm ERR! gyp ERR! System Darwin 22.3.0 npm ERR! gyp ERR! command "/opt/homebrew/Cellar/node/19.6.0/bin/node" "/opt/homebrew/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "build" "--fallback-to-build" "--module=/Users/seungwonjang/Desktop/VUE-ENDGAME/vue-til-server/node_modules/bcrypt/lib/binding/bcrypt_lib.node" "--module_name=bcrypt_lib" "--module_path=/Users/seungwonjang/Desktop/VUE-ENDGAME/vue-til-server/node_modules/bcrypt/lib/binding" "--napi_version=8" "--node_abi_napi=napi" "--napi_build_version=0" "--node_napi_label=node-v111" npm ERR! gyp ERR! cwd /Users/seungwonjang/Desktop/VUE-ENDGAME/vue-til-server/node_modules/bcrypt npm ERR! gyp ERR! node -v v19.6.0 npm ERR! gyp ERR! node-gyp -v v9.3.0 npm ERR! gyp ERR! not ok npm ERR! node-pre-gyp ERR! build error npm ERR! node-pre-gyp ERR! stack Error: Failed to execute '/opt/homebrew/Cellar/node/19.6.0/bin/node /opt/homebrew/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js build --fallback-to-build --module=/Users/seungwonjang/Desktop/VUE-ENDGAME/vue-til-server/node_modules/bcrypt/lib/binding/bcrypt_lib.node --module_name=bcrypt_lib --module_path=/Users/seungwonjang/Desktop/VUE-ENDGAME/vue-til-server/node_modules/bcrypt/lib/binding --napi_version=8 --node_abi_napi=napi --napi_build_version=0 --node_napi_label=node-v111' (1) npm ERR! node-pre-gyp ERR! stack at ChildProcess.<anonymous> (/Users/seungwonjang/Desktop/VUE-ENDGAME/vue-til-server/node_modules/node-pre-gyp/lib/util/compile.js:83:29) npm ERR! node-pre-gyp ERR! stack at ChildProcess.emit (node:events:512:28) npm ERR! node-pre-gyp ERR! stack at maybeClose (node:internal/child_process:1098:16) npm ERR! node-pre-gyp ERR! stack at ChildProcess._handle.onexit (node:internal/child_process:304:5) npm ERR! node-pre-gyp ERR! System Darwin 22.3.0 npm ERR! node-pre-gyp ERR! command "/opt/homebrew/Cellar/node/19.6.0/bin/node" "/Users/seungwonjang/Desktop/VUE-ENDGAME/vue-til-server/node_modules/.bin/node-pre-gyp" "install" "--fallback-to-build" npm ERR! node-pre-gyp ERR! cwd /Users/seungwonjang/Desktop/VUE-ENDGAME/vue-til-server/node_modules/bcrypt npm ERR! node-pre-gyp ERR! node -v v19.6.0 npm ERR! node-pre-gyp ERR! node-pre-gyp -v v0.14.0 npm ERR! node-pre-gyp ERR! not ok npm ERR! A complete log of this run can be found in: npm ERR! /Users/seungwonjang/.npm/_logs/2023-02-12T15_29_26_893Z-debug-0.log ➜ vue-til-server git:(master) ✗ 미치겠습니다..npm i -g @vue/cli는 입력한 상태입니다 그뒤로 npm run dev를 입력하면 에러가 나서 npm i bycrypt 를 입력하면 ➜ vue-til-server git:(master) ✗ npm i bycrypt npm ERR! code E404 npm ERR! 404 Not Found - GET https://registry.npmjs.org/bycrypt - Not found npm ERR! 404 npm ERR! 404 'bycrypt@*' is not in this registry. npm ERR! 404 npm ERR! 404 Note that you can also install from a npm ERR! 404 tarball, folder, http url, or git url. npm ERR! A complete log of this run can be found in: npm ERR! /Users/seungwonjang/.npm/_logs/2023-02-12T15_33_38_306Z-debug-0.log 해당 에러가 발생합니다 확인 부탁드립니다
안녕하세요. 강의 잘 듣고 있습니다. jenkins에서 helm, kubectl 사용할 수 있도록 설정하는 부분에 대하여 질문드립니다. 강의에서 kubectl, helm 명령어가 동작하지 않아 mkdir,cp,chown 명령어 사용하고 나니, 해당 명령어들을 jekins에서 사용할 수 있게 되었는데 사용 가능해지는지 원리가 궁금합니다. 강의만 들었을 때는 디렉토리생성, 파일copy, jekins권한부여 이정도만 다루고 있는데... 이 명령어들로 인해 어떻게 사용이 가능해지는 원리가 궁금합니다! 감사합니다.
설치완료 후 kubectl get pod -A 실행시 coredns, dashboard 관련 pod가 계속 pending 상태이고, 강의에서 해당명령어를 쳤을때와 다르게 pod 중 calico 관련 파드가 존재하지 않아서 Vagrantfile의 Calico 설치부분중 # Calico 설치 curl https://docs.projectcalico.org/manifests/calico.yaml -O kubectl apply -f calico.yaml 구문을 직접 master node에서 커맨드로 쳐본 결과 [root@k8s-master ~]# kubectl apply -f calico.yaml error: error validating "calico.yaml": error validating data: invalid object to validate; if you choose to ignore these errors, turn validation off with --validate=false 에러가 발생합니다. 해결방법 문의드립니다.
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] MemberService에서 아직 어떤 DB를 사용할지 모르니 참조타입을 MemberRepository로 하고 생성자를 MemoryMemberRepository를 한 것은 이해가 갔습니다. 다형성을 위해서 그러신 것이죠. private final MemberRepository memberRepository = new MemoryMemberRepository(); 근데 강의영상 12:00부터 의도치 않은 Member객체를 가르킬 수 있으니 MemberServiceTest에서 멤버변수 AfterEach()를 새로 만들어 리포지토리를 지우기 위해 MemoryMemberRepository의 clearStore()를 가져와야 했습니다. 그래서 MemberServiceTest 16라인에 MemoryMemberRepository memberRepository = new MemoryMemberRepository(); 이렇게 작성하셨습니다. 근데 제가 생각했을 때 참조타입도 MemoryMemberRepository 이고 생성자도 MemoryMemberRepository인데 어째서 참조변수의 이름은 memberRepository 인건지 궁금합니다. 귀한 시간 내주셔서 제 질문 읽어주셔서 감사합니다.
[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
코드를 그대로 따라하면서 작성했는데 이상하게도 영상 마지막 부분에서 나온 웹사이트를 통해서 시도해보면 채널 참가 첫 1회시에만 기능하고 채널 나가기를 누른 후 다시 참여할때는 emulator에서 아무리 기다려도 채널에 유저가 없습니다 가 뜹니다. 이유를 찾으려고 해봤지만,, 쉽지 않네요...
안녕하세요. 영한님 20만 수강생 진심으로 축하드립니다.^^🎉 프로젝트 도중에 막혀서 강의를 👀복습하던 중 질문드립니다..! (영한님 강의 덕분에 저도 이러한 고민을 하게되다니... 감사의 말씀 드립니다.😊) 페이징이 가능하고 item.name 으로 order 를 조회하려고 하면 어떠한 방식으로 코드를 작성 해야할까요? 일단 제가 생각한 방법은 다음과 같습니다. V3.1 적용 요구사항은 회원( member ), 결제( payment ), 배송( delievery ), 주문 상품( orderItem )을 포함해서 페이징이 되도록 주문( order )을 조회하고, 조건으로 상품 이름( item.name )으로 조회가 가능 해야 하는 것 입니다. orderItem 은 일대다 관계 이기 때문에 페이징이 불가합니다. 그래서 V3.1의 방법인 hibernate.default_batch_fetch_size 을 이용하여 IN 쿼리로 orderItem 을 조회하려고 합니다. 이렇게 하면 페이징이 가능하도록 order 는 조회할수는 있지만, item.name 을 조건으로 조회 할 수는 없습니다. V5 적용 그래서 V5에서 알려주신 방법을 사용했습니다. order 와 orderItem 을 분리한다. order 을 이용하여 orderItem 을 조회한다.(추가로 item.name 조건도 넣는다.) 조회한 결과를 하나의 List 으로 만든다. List 을 다시 Page 로 변환한다. public Page<AdminOrderListQueryDto> findOrdersByAdmin(Pageable pageable, OrderSearchCondition condition) { // 주문 전체 조회 List<AdminOrderListQueryDto> content = queryFactory .select(new QAdminOrderListQueryDto(order.id, order.status.stringValue(), order.safeKingPayment.amount, order.createDate, order.merchantUid, new QAdminOrderListPaymentQueryDto(order.safeKingPayment.status.stringValue()), new QAdminOrderListMemberQueryDto(order.member.name), new QAdminOrderListDeliveryQueryDto(order.delivery.receiver, order.delivery.status.stringValue())) ) .from(order) .leftJoin(order.safeKingPayment, safekingPayment) .leftJoin(order.delivery, delivery) .leftJoin(order.member, member) .where( orderBetweenDate(condition.getFromDate(), condition.getToDate()), deliveryStatusEq(condition.getDeliveryStatus()), paymentStatusEq(condition.getPaymentStatus()) ) .orderBy(order.createDate.desc()) .fetch(); // 주문 아이디 저장 List<Long> orderIds = content.stream() .map(o -> o.getId()) .collect(Collectors.toList()); // 상품명으로 검색 조건 Map<Long, List<AdminOrderListOrderItemQueryDto>> orderItemMap = findOrderItemMap(orderIds, condition.getKeyword()); // 주문객체에 주문 상품컬렉션 저장 content.forEach(o -> o.setOrderItems(orderItemMap.get(o.getId()))); // 주문상품이 null이 아닌 컬렌션으로 구성 List<AdminOrderListQueryDto> resultContent = content.stream() .filter(o -> o.getOrderItems() != null) .collect(Collectors.toList()); // List를 Page로 변환 PageRequest pageRequest = PageRequest.of(pageable.getPageNumber(), pageable.getPageSize()); int start = (int) pageRequest.getOffset(); int end = Math.min(start + pageRequest.getPageSize(), resultContent.size()); if(start > end) { throw new OrderException("데이터가 없습니다. 관리자에게 문의하세요."); } return new PageImpl<>(resultContent.subList(start, end), pageRequest, resultContent.size()); } private Map<Long, List<AdminOrderListOrderItemQueryDto>> findOrderItemMap(List<Long> orderIds, String keyword) { // 주문 상품 검색(item.name 조건 포함) List<AdminOrderListOrderItemQueryDto> orderItems = queryFactory.select(new QAdminOrderListOrderItemQueryDto(orderItem.order.id, orderItem.id, orderItem.item.name)) .from(orderItem) .leftJoin(orderItem.item, item) .where( orderItem.order.id.in(orderIds), keywordContains(keyword) ) .fetch(); // Map 으로 변환 Map<Long, List<AdminOrderListOrderItemQueryDto>> orderItemMap = orderItems.stream() .collect(Collectors.groupingBy(orderItemQueryDto -> orderItemQueryDto.getOrderId())); return orderItemMap; } // 아이템이름 포함 조건 private BooleanExpression keywordContains(String keyword) { return hasText(keyword) ? item.name.contains(keyword) : null; } 이러한 방식을 사용하는게 맞을까요? 🤔 감사합니다.^^
메인 페이지에서 Props로 받아 포스트 데이터 출력하기 강의에서 여기까지 한 후, 2개의 포스트 아이템이 화면에 잘 출력되는지 확인해주세요. >>>> 이 부분까지 하고 실행을 하려니 아래와 같은 쿼리 오류가 생겼습니다. There was an error in your GraphQL query: Field "thumbnail" must not have a selection since type "String" has no subfields. This can happen if you e.g. accidentally added { } to the field "thumbnail". If you didn't expect "thumbnail" to be of type "String" make sure that your input source and/or plugin is correct. However, if you expect "thumbnail" to exist, the field might be accessible in another subfield. Please try your query in GraphiQL. It is recommended to explicitly type your GraphQL schema if you want to use optional fields. publicURL 을 못가져오는것 같은데.. 어떻게 해결해야할까요 ㅠ.ㅠ 레포지토리 남깁니다! https://github.com/syankkim/syankkim.github.io
const savedProductSaleslocation = await this.productSaleslocationRepository.save({ ...productSaleslocation, }); 위 코드에서, 아래처럼 코드를 바꿔봤습니다. const savedProductSaleslocation = await this.productSaleslocationRepository.save(productSaleslocation); 정상 작동했는데 차이가 무엇인가요? 또 권장하는 방식은 무엇인가요?